smooth waters run deep

1d-1c/BOJ

11047_동전0 (JAVA)

yeon_11 2020. 9. 9. 21:17
 

11047번: 동전 0

첫째 줄에 N과 K가 주어진다. (1 ≤ N ≤ 10, 1 ≤ K ≤ 100,000,000) 둘째 줄부터 N개의 줄에 동전의 가치 Ai가 오름차순으로 주어진다. (1 ≤ Ai ≤ 1,000,000, A1 = 1, i ≥ 2인 경우에 Ai는 Ai-1의 배수)

www.acmicpc.net

import java.util.*;
import java.lang.*;
import java.io.*;

class Main
{
	public static void main (String[] args)
	{
		Scanner sc = new Scanner(System.in);
		int N = sc.nextInt();
		int K = sc.nextInt();
		int[] coin = new int[N];
		int maxN=0;
		for(int i=0; i<N; i++){
			coin[i] = sc.nextInt();
			if(coin[i]<=K) maxN = i;
		}
		
		int ans=0;
		while(maxN>=0){
			if(K/coin[maxN]!=0){ //몫이 0이 아니면 나눠떨어진다는 의미
				ans+=K/coin[maxN];
				K%=coin[maxN];
				
				if(K==0) break;
			}
			maxN--;
		}
		
		System.out.println(ans);
	}
	
}

 

[문제 풀이 생각 과정]

1. 입력받은 동전의 종류 중에서, K보다 큰 동전은 계산에 이용되지 않는다.

   제외시키고 생각하기 위해서 maxN을 구했다.

2. maxN부터 0 순으로 (동전종류의 내림차순으로) K를 나눠준다.

   만약 K/coin[i]!=0 이라면 즉, 몫이 0이 아니라면 나눠떨어진다는 의미이고,

   이를 내림차순으로 확인하고 있기 때문에- 필요한 동전 개수의 최솟값에 포함된다!

   ans+=K/coin[i]; (몫을 더해준다)

   K%=coin[i]로 계산해야 하는 K값을 수정해준다. 

 

   K/coin[i]==0이라면 즉, 몫이 0이라면 나눠떨어지지않기 때문에 제외시킨다.

  (i-1번째로 이동 후 다시 확인)

3. 확인하는 과정에서 K가 0이 된다면 확인이 끝났다는 의미! break로 종료한다

 

'1d-1c > BOJ' 카테고리의 다른 글

2667_단지번호붙이기 (JAVA) (C++)  (0) 2020.09.10
2178_미로 탐색 (JAVA) (C++)  (0) 2020.09.10
11399_ATM (JAVA)  (0) 2020.09.09
1316_그룹 단어 체커 (C++)  (0) 2020.08.28
2941_크로아티아 알파벳 (C++)  (0) 2020.08.26