이 문제의 핵심은 '42로 나눈 10개의 나머지들을 어떻게 비교할 것 인가'이다.

 

이런 경우 경우의 수를 배열에 모두 담고 나올때마다 카운팅을 하는 것을 나는 주로 사용한다.

 

즉, 어떤 수를 42로 나눌 경우 나올 수 있는 나머지는 0~41 이다 그러므로 배열 42개의 크기 만큼 만들어 나머지가 나올 때마다 해당 자리에 카운팅을 해주는 것이다. 

 

아래 내가 작성한 코드와 주석을 보면 바로 이해할 수 있을 것이다.

 

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class Main {

	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		int[] arr = new int[42]; //42로 나눴을 때 나머지는 42보다 작을 수 밖에 없으므로 0~41까지 배열을 할당하고 나머지가 발생하면 해당 자리 숫자에 카운트

		for(int i=0; i<arr.length; i++) { // 배열 0으로 초기화
			arr[i]=0;
		}

		for(int i=0; i<10; i++) {
			int num = Integer.parseInt(br.readLine());

			int remainder = num%42; // 42로 나눴을때 나머지를 받는 변수
			arr[remainder]++; //나머지가 발생하여 해당 자리 1증가
		}
		int count = 0;
		for(int i=0; i<arr.length; i++) { // 서로 다른 나머지 값을 카운팅
			if(arr[i]!=0) {
				count++;
			}
		}
		bw.write(count + "\n"); // 출력
		bw.flush();
	}
}
반응형

+ Recent posts