반응형

자료구조 & 알고리즘(Data Structure & Algorithm)/알고리즘(Algorithm) 4

[Java] 10진수를 n진수로, n진수를 10진수로 변환하기 - 진법 변환

자바의 진법 변환 진법 변환은 알고리즘 문제에서 자주 활용된다. 자바에서는 이를 쉽게 활용할 수 있도록 함수를 제공하고 있다. 자바에서 제공하는 함수를 통해 진법을 변환하는 방법과 직접 구현하여 변환하는 방법을 알아보고자 한다. 10진수를 N진수로 변환하기 자바 내장 함수 사용 10진수의 숫자를 N진수로 변환하기 위해 java.lang 패키지에서 Integer와 Long 클래스의 toString() 메서드를 제공한다. 첫 번째 인자에는 변환할 수, 두 번째 인자에는 변환할 진법을 넣어 쉽게 변환할 수 있다. 이 외에도 java.math 패키지의 BigInteger 클래스의 toString() 메서드를 통해 진법 변환을 할 수도 있다. public class Main { public static void ..

[Java] 파스칼의 삼각형 알고리즘 구현하기 - Pascal's triangle

파스칼 삼각형 파스칼의 삼각형은 블레즈 파스칼에 의해 제안된 삼각형으로 구성된 배열이다. 파스칼의 삼각형은 다음과 같은 규칙이 있다. 각 행의 첫 번째와 마지막의 숫자는 1이다. 각 행의 중간에 위치한 숫자는 이전 행의 왼쪽 위치에 있는 숫자와 바로 위에 있는 숫자의 합이다. 구현 위 두 규칙을 통해 파스칼의 삼각형을 2차원 배열로 구현해 보자. public class Main { public static void main(String[] args) { int n = 7; // 파스칼의 삼각형 만들기 int[][] pascal = new int[n][]; for (int i = 0; i < n; i++) { pascal[i] = new int[i + 1]; // 규칙 1. 각 행의 첫 번쨰와 마지막 숫자..

[Java] 병합 정렬 (Merge Sort) - 정렬 알고리즘 (Sorting Algorithm)

병합 정렬 (Merge Sort) 병합 정렬(Merge Sort)은 효율적이고 안정적인 정렬 알고리즘 중 하나로, 분할 정복(Divide and Conquer) 알고리즘을 따른다. 병합 정렬의 기본 개념은 다음과 같다. 분할(Divide) : 입력받은 배열을 절반으로 분할하고, 길이가 1이 될 때까지 분할을 반복한다. 정복(Conquer) : 각 분할된 배열에 대해 재귀적으로 정렬을 수행한다. 병합(Merge) : 분할한 배열을 병합하면서 정렬한다. 두 개의 정렬된 배열을 하나의 정렬된 배열로 합치는 과정으로 병합 과정에서 실제 정렬이 이루어진다. 병합 정렬의 시간 복잡도는 O(n log n)으로 길이가 긴 배열을 안정적으로 정렬할 때 적합한 알고리즘이다. 병합 정렬의 장단점 장점 O(n log n)의 ..

[Algorithm] 탐욕 알고리즘(Greedy)란 무엇인가?

Greedy Algorithm Greedy는 “탐욕스러운, 욕심 많은”이란 뜻을 가진 용어로, Greedy Algorithm은 탐욕 알고리즘이라 부른다. Greedy 알고리즘은 이름 그대로 현재 상황에서 지금 당장 좋은 것만 고르는 방법이다. 그리디 알고리즘으로 문제를 해결하는 방법 선택 절차(Selection Procedure) : 현재 상태에서 최적의 해답을 선택한다. 적절성 검사(Feasibility Check) : 선택된 해가 문제의 조건을 만족하는지 검사한다. 해답 검사(Solution Check) : 문제가 해결되었는지 검사하고, 해결되지 않았다면 선택 절차로 돌아간다. 그리디 알고리즘의 예로 거스름돈 계산 문제가 있다. 거스름 돈 n이 있고, 500원, 100원, 50원, 10원으로만 거슬러..

반응형