본문 바로가기
study/CodingTest

백준 3052 나머지 (Java) - HashSet 사용하기

by 고기만두(개발자) 2021. 11. 7. 13:38
728x90
반응형

문제

두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다.

예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다. 

수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다.

그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.

입력

첫째 줄부터 열번째 줄까지 숫자가 한 줄에 하나씩 주어진다.

이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.

출력

첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.


10개의 자연수를 입력받고

%42 값을 저장해야 하는데 한가지 문제가 있다.

나머지의 종류 갯수를 구하고 싶은데 중복을 어떻게 제거하지?

 

1 4개 2 3개 이런식으로 나오면 4개 3개가 아닌 1, 2 두 종류니까 2개를 제출해야한다.

여러번 방문해도 방문자 수는 한 번만 올라가게 하는것과 비슷한데

그럼 내가 여기서 뭘 써야 하지?

 

2577번 문제처럼 일단 나머지값을 배열에 저장하면 되나?

그러면 또 0부터 41까지 갯수를 다시 세야하는데 귀찮다.

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));
        HashSet<Integer> hs = new HashSet<Integer>();
              
      
        for(int i = 0; i < 10 ; i++){    //10번 반복
        	
            //들어온 수 /42 의 나머지값을 저장 - 중복제거
            hs.add(Integer.parseInt(br.readLine()) % 42);    
        }
        
        System.out.println(hs.size());    //가짓수 입력
        
    }
}

 

 

과거에 hashmap에 관한 글을 작성한 적 있다. 궁금하면 여기 클릭

hashset는 hashmap과 비슷하지만, 중복된 원소를 제거하고 저장한다는 정도의 차이점을 가지고 있다.

42로 나누었을 때 나머지의 갯수를 출력해야 하는데, 같은 게 여러번 들어가면 중복을 제거해야 한다.

입력된 자연수 갯수만큼 반복하여 hashset에 %42 한 값을 저장하면

hashset 의 크기가 나머지 종류 갯수가 된다.

728x90
반응형

댓글