본문 바로가기
Algorithm[Java]

[Backjoon - 3052] [Java] 나머지

by blackjack_96 2022. 3. 3.

링크 : https://www.acmicpc.net/problem/3052

 

3052번: 나머지

각 수를 42로 나눈 나머지는 39, 40, 41, 0, 1, 2, 40, 41, 0, 1이다. 서로 다른 값은 6개가 있다.

www.acmicpc.net

[Backjoon - 3052] [Java] 나머지

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

class Main {
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int[] count_arr = new int[42];
        int temp;
        int result = 0;

        for(int i=0; i<10; i++) {
            temp = Integer.parseInt(br.readLine());
            count_arr[temp%42]++;
        }

        for(int i=0;i<count_arr.length;i++) {
            if (count_arr[i] != 0) {
                result++;
            }
        }
        System.out.println(result);
    }  
}

10개의 수를 입력받아서

각 수를 42로 나누었을 때의 나머지 값이 각각 나옵니다.

 

 

이 때, 서로 다른 나머지 값이 몇 개가 출력되는가를 구하는 문제로,

위 문제의 핵심은 이 부분입니다.

 

for(int i=0; i<10; i++) {
   temp = Integer.parseInt(br.readLine());
   count_arr[temp%42]++;
}

...

for(int i=0;i<count_arr.length;i++) {
    if (count_arr[i] != 0) {
        result++;
    }
}

count_arr을 사용하여

입력받은 수를 42로 나누었을 때 나머지를 인덱스로 하는 배열 내 데이터에 ++ 연산을 합니다.

 

 

만약 43이라는 값과 85라는 값을 입력받았다고 해 봅시다.

두 수는 42로 나눈 나머지가 모두 1이므로

같은 입력케이스로 처리해야만 합니다.

 

 

위 코드에 의하면

 

 

43이라는 입력을 받았을 때

count_arr[1] ++이 실행되고

 

 

85라는 입력을 받았을 때도

count_arr[1] ++이 실행됩니다.

 

 

이런 방식으로,

count_arr을 이용하여

입력받은 수의 나머지를 인덱스로 하는 배열 내 데이터에 ++연산을 해 주고,

최종 단계에서

count_arr내 데이터에서 0이 아닌 정수의 개수를 구하면 됩니다.