티스토리 뷰

반응형

백준 문제 보기

 

3052번: 나머지

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

www.acmicpc.net

 

바로 코드로 들어보자.

 

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

public class Q3052 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 10 개 숫자를 42로 나눈 나머지
        int[] arr = new int[42];
        int count=0;
        for(int i=0; i<10; i++) {
            int N = Integer.parseInt(br.readLine());
            int mod = N%42;
            arr[mod]++;
        }
        for(int i=0; i<42;  i++) {
            if(arr[i]>0) {
                count++;
            }
        }
        System.out.println(count);
    }
}

코드를 간단히 설명하면 다음과 같다.

우선 배열의 길이를 42로 생성했는데,

문제에서 42로 나눈 나머지의 갯수를 출력하라했으므로,

 

자연수 N을 42로 나누면 나머지의 범위는 0~41이므로

배열의 크기를 42로 생성했다.

 

int mod=N%42; 코드에서

입력받은 숫자 N을 42로 나눈 나머지를 변수에 담았고,

arr[mod]++; 를 통해 arr의 mod번째 칸에 값을 +해주었다.

 

근데 문제에서 요구한 출력값은 나머지의 '종류'이기 때문에

for문을 다시 한번 돌려서 arr[i]>0일때 count변수를 증가시켜

count 변수를 출력시켰다.

 

 

다른 방법이 있을까 하고 인터넷을 검색해보다 'HashSet'을 이용해 풀 수 있는 방식을 알아냈다.

(참고한 블로그는 마지막에 '출처'로 표시해두겠다.)

 

HashSet을 이용한 코드를 알아보자.

 

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

public class Q3052_2 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        HashSet<Integer> h = new HashSet<>();

        for(int i=0; i<10; i++) {
            int N = Integer.parseInt(br.readLine());
            int mod = N % 42;
            h.add(mod);
        }
        System.out.println(h.size());
    }
}

HashSet의 특징은

중복되는 원소를 넣으면 하나의 값만 저장되기 때문에,

이 문제에서 HashSet을 이용하면  

결국 HashSet의 길이만 최종적으로 출력하면 되기 때문에 효율적이다!

 

HashSet.size()는 HashSet의 크기를 반환하는 메서드로,

여기서는 서로 다른 나머지의 개수(출력값)이 들어간다.

 

그럼 두 풀이의 실행시간을 비교해보자.

 

 


 

실행결과

 


문제 자체가 그리 어려운 문제는 아니었다.

문제를 보다 이해가 안되거나 설명이 이상한 부분이 잇으면 댓글을 활용해주길 바란다.

 

 

두 번째 HastSet 문제 풀이 출처(필자가 조금 응용함.)

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

 

반응형