https://www.acmicpc.net/problem/3052
[ 문제 ]
두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
수 10개를 입력받은 뒤, 이를 42로 나눈 나머지를 구한다. 그 다음 서로 다른 값이 몇 개 있는지 출력하는 프로그램을 작성하시오.
[ 입력 ]
첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어진다. 이 숫자는 1,000보다 작거나 같고, 음이 아닌 정수이다.
[ 출력 ]
첫째 줄에, 42로 나누었을 때, 서로 다른 나머지가 몇 개 있는지 출력한다.
[ 입출력 예시 ]
예제 입력 | 예제 출력 |
---|---|
1 2 3 4 5 6 7 8 9 10 | 10 |
42 84 252 420 840 126 42 84 420 126 | 1 |
39 40 41 42 43 44 82 83 84 85 | 6 |
방법 1. 중복되는 나머지 값이 몇개인지 확인해주는 것이므로 알아서 중복된 값을 제한해주는 Set(집합)을 이용하였다. Set을 하나 선언하여준다.
입력된 10개의 값을 42로 나누어 나머지를 Set에 add하여준다.
최종으로 나온 Set의 사이즈를 출력하여준다.
방법 2. 배열을 42칸(0~41) 설정해주고 나눈 나머지 값의 인덱스를 증가(++)시킨다.
개수를 세어줄 변수를 선언하여 배열을 돌면서 0(나오지 않은 값)이 아닌 값이 존재하면 개수를 세어줄 변수를 증가(++)시켜 개수를 세어줄 변수의 값을 출력한다.
3. 방법 3. 방법1과 비슷한 방법으로, ArrayList를 설정해주고
나머지값이 리스트에 !contains.(나머지값)하여 중복되지 않게 리스트에 추가하여 준다음 리스트의 사이즈를 출력한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
HashSet<Integer> rem = new HashSet<Integer>();
for(int i=0; i<10; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
rem.add(Integer.parseInt(st.nextToken())%42);
}
System.out.println(rem.size());
}
}