728x90
3052번 나머지 문제는 수학 문제입니다. 첫째 줄부터 열번째 줄 까지 숫자가 한 줄에 하나씩 주어집니다. 각 숫자를 42로 나누어서 나온 나머지 값들 중 중복을 제거하고 난 뒤, 서로 다른 나머지 값이 몇 개인지 출력해야 합니다.
백준알고리즘 문제에서는 알고리즘 분류를 배열로 했지만 컬렉션 Set
을 사용해서 중복 숫자를 쉽게 제거 할 수 있었습니다.
소스 코드 (컬렉션)
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
/**
* 나머지 문제<br>
* 알고리즘 분류 : 배열
*
* @author jayden-lee
*/
public class Main {
private static final int N = 10;
private static final int STANDARD_NUM = 42;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Set<Integer> remainderNumSet = new HashSet<>();
for (int i = 0; i < N; i++) {
int number = scanner.nextInt();
if (number > 1000 || number < 0) {
new RuntimeException("범위 밖의 숫자를 입력했습니다.");
}
remainderNumSet.add(number % STANDARD_NUM);
}
System.out.println(remainderNumSet.size());
}
}
컬렉션을 사용하는 것은 치팅과 같으므로 배열을 이용해서도 풀어봤습니다. 나머지를 구하기 위한 기준이 되는 숫자는 42이므로 어느 숫자를 나누더라도 0부터 41까지 범위의 나머지 값이 나올수 밖에 없습니다.
따라서 크기 42만큼의 checked
배열을 생성해서 특정 나머지 값이 나타났는지 체크합니다.
소스 코드 (배열)
import java.util.Scanner;
/**
* 나머지 문제<br>
* 알고리즘 분류 : 배열
*
* @author jayden-lee
*/
public class Main {
private static final int N = 10;
private static final int STANDARD_NUM = 42;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int count = 0;
boolean[] checked = new boolean[42];
for (int i = 0; i < N; i++) {
int number = scanner.nextInt();
if (number > 1000 || number < 0) {
new RuntimeException("범위 밖의 숫자를 입력했습니다.");
}
if (!checked[number % STANDARD_NUM]) {
count++;
}
checked[number % STANDARD_NUM] = true;
}
System.out.println(count);
}
}
'Algorithm' 카테고리의 다른 글
백준알고리즘 1026번 보물 (0) | 2019.07.31 |
---|---|
백준알고리즘 1316번 그룹 단어 체커 (0) | 2019.07.30 |
백준알고리즘 10988번 팰린드롬인지 확인하기 (0) | 2019.04.25 |
백준알고리즘 1094번 막대기 (0) | 2019.04.22 |
백준알고리즘 1475번 방 번호 (0) | 2019.04.22 |
댓글