본문 바로가기
백준

[백준] 3052번 : 나머지 – JAVA [자바]

by Hongwoo 2022. 7. 7.
반응형

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

 

3052번: 나머지

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

www.acmicpc.net

 


  • 문제

 

 


  • 문제 풀이

백준 3052번 나머지는 브론즈 2 난이도의 수학 문제이다. 이 문제에서는 자연수 10개가 주어진다. 그리고 모든 수를 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지를 출력하면 되는 문제이다. 

 

이 문제는 사이즈가 42인 boolean형 배열을 이용해서 간단하게 풀 수 있는데. 어떠한 자연수를 42로 나누었을 때 나올 수 있는 나머지는 0부터 41이다. 따라서 사이즈가 42인 boolean형 배열을 이용하면 자연수를 42로 나누었을 때 나온 나머지가 새로운 나머지인지 아닌지를 알 수 있게 된다. 

 

예를 한번 들어보겠다. 처음에 boolean형 배열 remainder를 선언하면 자동으로 모든 값은 false다. 그리고 만약에 나머지가 1이면 count를 1씩 증가하고 인덱스 1의 배열 값을 true로 바꿔준다. 그리고 나중에 나머지가 1인 경우에는 그대로 continue 한다. 따라서 2가지의 케이스가 있다.

 

Case 1: remainder [n % 42] == false

false라는 의미는 새로운 나머지의 값이므로 count를 1 더해주고 remainder [n%42]를 true로 설정해준다.

 

Case 2 : remainder [n % 42] == true

true라는 의미는 이미 나온 나머지이므로 할 거 없이 continue 시켜준다.

 

자세한 코드는 밑에 있다.

 


  • 코드

 

import java.io.*;
import java.util.*;
public class Main {

    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        boolean[] remainder = new boolean[42];  //42로 나눈 나머지가 이미 있었는지 확인
        int count = 0;
        for (int i = 0; i < 10; i++) {
            int n = Integer.parseInt(br.readLine());
            if (!remainder[n%42]) {  //새로운 나머지면
                remainder[n%42] = true;  //나머지가 이미 있었다고 확인 표시
                count++;  
            }
        }
        System.out.print(count);
    }
}

 

 

반응형

댓글