[★1][백준3052번]나머지 (JAVA)
카테고리: BKJN
태그: Algorithm Java Coding Test
[★1][백준3052번]나머지 (JAVA)
3052번 문제 ☞ https://www.acmicpc.net/problem/3052
난이도 ☞ [★1]
나머지
- 문제
- 두 자연수 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
1010 예제입력 예제출력 42
84
252
420
840
126
42
84
420
1261 예제입력 예제출력 39
40
41
42
43
44
82
83
84
856
- 두 자연수 A와 B가 있을 때, A%B는 A를 B로 나눈 나머지 이다. 예를 들어, 7, 14, 27, 38을 3으로 나눈 나머지는 1, 2, 0, 2이다.
내가 푼 풀이
이번 문제도 매우 쉬울 수도 있고, 조금 애를 먹을 수도 있다. 하지만 HashSet
을 쓴다면 정말 쉬운 문제가 되어진다. 그럼 간략하게 HashSet
에 대해서 코멘트를 좀 해보고 넘어가도록 하겠다.
HastSet
- 자바 Collection 중 Set의 파생 클래스. 즉, Set 인터페이스를 구현
- 멤버의 중복 여부를 체크하기 위해 인스턴스의 동일성을 확인해야 함
- 중복원소를 허용하지 않아 중복되는 원소는 하나만 저장함
- 동일성 구현을 위해 필요에 따라 equals()와 hashCode() 메서드를 재정의 함
- 아이디가 동일한 경우 같은 멤버이므로 중복되지 않도록 Member 클래스의 equals()와 hashCode() 메서드를 재정의함
- HashSet은 순서의 개념이 없어 정렬하길 원한다면 리스트로 변환 후 정렬해야 함
[ 풀이 1 ]
메모리 :
17672KB
시간 :208ms
Scanner
import java.util.HashSet;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
HashSet<Integer> hs = new HashSet<Integer>();
for (int i = 0; i < 10; i++) {
hs.add(s.nextInt() % 42);
}
s.close();
System.out.println(hs.size());
}
}
Scanner
방식은 가장 기본적인 방법이다. 여기서 hs.add()
는 HashSet.Add()
이며, HashSet
을 저장하는 메서드이다. 그리고 hs.size()
는 HashSet.size()
이며 HashSet 의 크기( 저장되어 있는 원소의 개수)
를 반환한다.
다음 풀이는 BufferedReader
를 이용한 방법이며, 위와 거의 유사하다고 생각된다.
[ 풀이 2 ]
메모리 :
14244KB
시간 :116ms
BufferedReader
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.HashSet;
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++) {
hs.add(Integer.parseInt(br.readLine()) % 42);
}
br.close();
System.out.println(hs.size());
}
}
매우 쉽게 이 정도로 풀 수 있는 문제이며, 이번 문제에서도 보다시피 BufferedReader
가 훨씬 성능이 좋음을 알 수 있다.
댓글 남기기