(Java) 백준 3052번 - 나머지

코딩너구리·2026년 1월 15일

코딩 문제 풀이

목록 보기
158/266

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

문제

> 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 
# > 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 
> 수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 
> 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

접근

10개의 수에 대해서 각각의 나머지가 나올 것이다. 이 나머지 10개를 전부 모아놓고 몇개의 종류(각각 다른 수)인지 따져야하므로 중복은 제거하고 순수 종류만 따져야한다. 이럴 땐 map을 사용한다.

문제해결

> 10개의 수를 반복문으로 입력받으며 N에 저장한다.
> N에 저장된 수를 42로 나누고 먼저 map에 이 나머지가 있는지 확인한다.
> 있다면 그 수의 밸류값을 가져와 1을 누적시켜준다. 이 밸류값은 그 수가 총 몇번 나왔나를 말한다.
> 나오지 않았다면 그 나머지를 키값으로 밸류에 1값을 주며 새로 저장한다.
> 10개의 숫자에 대한 처리가 끝나고 맵의 사이즈를 출력해준다.

코드

import java.io.*;
import java.util.*;
import java.lang.*;
public class Main
{
    //3052번 나머지
    public static void main(String[] args) throws IOException
    {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        Map<Integer, Integer> num = new HashMap<>();
        for (int i = 0; i < 10; i++)
        {
            int N = Integer.parseInt(br.readLine());
            if(num.containsKey(N % 42))
            {
                num.put(N % 42, num.get(N%42) + 1);
                continue;
            }
            num.put(N % 42, 1);
        }
        System.out.println(num.size());
    }
}

후기

맵의 접근이 좀 복잡했다. c++에선 num.first, second로 접근하면 되는데 put, get등을 써야하므로 불편했다.

0개의 댓글