본문 바로가기

Algorithm/Greedy

(3)
1이 될 때 까지 ( 2018 알고리즘 대회 ) 1. 문제 설명 어떠한 자연수 N이 주어지면, 이를 아래 조건 중 하나를 선택하여 최종 1이 될 때 까지 반복하려 한다. - N에서 1을 뺀다. - N을 K로 나눈다. 이 때, 위 두 과정을 수행해야 하는 최소 횟수를 구하는 프로그램을 구현하면 된다. 예를 들어 N = 19, K = 3 가정하자. 1. N에서 1을 뺀다 => 18 2. N을 K로 나눈다 => 6 3. N을 K로 나눈다 => 2 4. N에서 1을 뺀다 => 1 즉, 위 과정을 최소한으로 진행되는 횟수는 4임을 알 수 있다. 2. 문제 해결 핵심 아이디어는 나누기 과정을 최대한 많이 수행하면 된다. 나눌수록 획기적으로 값이 작아지기 때문에, 가능하면 나눗셈 과정이 항상 더 숫자를 빠르게 줄이는 방법이 된다. 나눗셈을 많이 포함시키며 과정을 ..
숫자 카드 게임 ( 2019 국가 교육기관 코딩 테스트 ) 1. 문제 설명 여러 개의 숫자 카드가 주어질 때, 다음 조건을 만족하면서 가장 높은 숫자가 쓰인 카드 한 장을 뽑는 게임이다. - 숫자가 쓰인 카드가 N * M 형태로 존재하며, N은 행의 개수, M은 열의 개수를 의미한다. - 뽑을 카드가 있는 행을 선택한다. - 선택된 행에 포함된 카드 중 가장 숫자가 낮은 카드를 뽑는다. - 여러 행을 선택 하고, 위의 조건에 따라 낮은 카드를 또 가져온다. 그 중 가장 큰 숫자의 카드를 뽑는다. 예를 들어, 3, 1, 2 4, 2, 1 5, 3, 3 순서의 3 * 3 형태의 카드 배열이 있다고 존재하면, 1 째 행은 가장 낮은 숫자의 카드는 1, 2 째 행의 가장 낮은 숫자 카드는 1, 마지막 3 째 행의 가장 낮은 숫자 카드는 3 이다. 여기서 가장 큰 숫자의..
큰 수의 법칙 ( 2019 국가 교육기관 코딩 테스트 ) 1. 문제 설명 특정한 배열이 있다. 주어진 규칙은 M번을 더하여 가장 큰 숫자를 만드는 것이고, 이 때 같은 인덱스에 해당하는 숫자를 최대 K번 까지만 반복하여 더할 수 있다고 한다. 예를 들어 배열 [ 2, 5, 4, 3, 2 ] 가 주어지고, M = 8, K = 3 이라고 주어지면, 8번을 더해 가장 큰 숫자를 만드는 경우이다. 이 때 최대 3번의 반복만큼 하나의 인덱스 숫자에 대해 덧셈이 허용된다. 즉, 5 + 5 + 5 + 4 + 5 + 5 + 5 + 4 = 38 이 가장 큰 숫자가 된다. 반면, 배열 [ 3, 5, 3, 5, 3 ] 이 주어지고, 같은 K, M이 주어질 때 가장 큰 숫자는 다음과 같다. ( 5 + 5 + 5 ) + ( 5 + 5 + 5 ) + 5 + 5 = 40 이 가장 큰 숫..