[백준] 11047번 : 동전 0 - JAVA[자바]

진세종·2022년 2월 8일
0

백준

목록 보기
1/3

11047번 : 동전 0


방법1. Scanner

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		// 첫째 줄에 N, K가 공백으로 주어지므로 N,K에 sc.nextInt()로 담아준다.
		int N = sc.nextInt(), K = sc.nextInt();
		// 둘째 줄 부터 N개 종류의 동전들이 주어진다. 따라서 동전의 종류를 담을 N칸 배열을 선언한다. 
		int []coin = new int[N];
		// 총 몇개의 동전이 필요한지 체크할 변수
		int count = 0;
		
		// coin[]의 0~N-1방에 동전의 값을 넣어 준다.  
		for (int i = 0; i < N; i++) {
			coin[i] = sc.nextInt();
		}
		
		// 최소한의 동전 개수를 찾아야 하므로 동전가치가 가장 큰 N-1번방부터 coin[i]를 찾는다.
		for (int i = N-1; i >= 0; i--) {
			if(K >= coin[i]) {// K보다 작거나 같으면서 가장 가치가 큰 coin[i]를 찾는는다.
				// K / coin[i]를 통해 coin[i]가 몇번 쓰였는지 개수를 센다.
				// 그리고 그 몫을 count에 누적시킨다.
				count += (K / coin[i]);
				// coin[i]*몫한 나머지 값. 즉, K % coin[i]한 값을 변수 K에 다시 넣어준다.
				K = (K % coin[i]);
				// K = 0이 되는 순간 반복문은 끝난다.
				// 반복이 돌아가능 동안 누적된 count값은 N개의 동전의 종류 중 최소한의 동전으로
				// K의 값과 같아진 동전들의 개수다.
			}
		}
		// 최소한의 동전 개수 출력
		System.out.println(count);
	}
}

처리 속도가 느린 단점이 있다.


방법2. BufferedReader

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Mains {
	public static void main(String[] args) throws IOException{
    	// 입력 받을 준비
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        // 출력할 준비
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        // 문자열을 지정한 구분자로 문자열을 쪼개주는 클래스
        // new StringTokenizer()사용시 디폴트로 공백과 엔터로 문자열을 쪼갠다.
		StringTokenizer st = new StringTokenizer(br.readLine(), " ");
		                      //첫째줄에 받은 N K를 공백을 기준으로 쪼갠다.
		// nextToken()을 통해 쪼갠 문자열 N을 int N에 담는다.
		int N = Integer.parseInt(st.nextToken());
        // nextToken()을 통해 쪼갠 문자열 K을 int K에 담는다.
		int K = Integer.parseInt(st.nextToken());
		
		// 동전의 종류를 담은 인트 배열
		int[] coin = new int [N];
		
		for (int i = 0; i < N; i++) {
        	// 두번째 줄 이후의 동전의 종류들을 br.readLine()으로 받는다.
            // Integer.parseInt()를 통해 정수로 변환해 coin[i]에 담는다.
			coin[i] = Integer.parseInt(br.readLine());
		}
		// K원까지 필요한 동전의 개수를 세기 위한 변수
		int count = 0;
		for (int i = N-1; i >= 0; i--) {
			if(K >= coin[i]) {
				count += K / coin[i];
				K = K % coin[i];
			}
		}
		// bw.write()를 통해 출력한다. cf) System.out.print()보다 빠르다.
		// 정수인 count를 String.valueOf()로 문자열로 변환한다.
		bw.write(String.valueOf(count));
		
		// 사용한 br과 bw를 닫아준다.
		br.close();
		bw.close();
 	}
}

속도에서 월등히 빠른것을 확인 할 수 있다.

참고사이트

https://st-lab.tistory.com/143

profile
개발자 지망생

0개의 댓글