설명
현수네 반에는 N명의 학생들이 있습니다.
선생님은 반 학생들에게 1부터 10,000,000까지의 자연수 중에서 각자가 좋아하는 숫자 하나 적어 내라고 했습니다.
만약 N명의 학생들이 적어낸 숫자 중 중복된 숫자가 존재하면 D(duplication)를 출력하고,
N명이 모두 각자 다른 숫자를 적어냈다면 U(unique)를 출력하는 프로그램을 작성하세요.
입력
첫 번째 줄에 자연수 N(5<=N<=100,000)이 주어진다.
두 번째 줄에 학생들이 적어 낸 N개의 자연수가 입력된다.
출력
첫 번째 줄에 D 또는 U를 출력한다.
예시 입력 1
8
20 25 52 30 39 33 43 33
예시 출력 1
D
문제 해결
학생들이 입력해서 낸 숫자 중 중복이 존재하면 'D'를 출력하고, 다 다른 숫자이면 'U'를 출력하는 문제이다.
처음에는 문제를 HashSet으로 접근해 풀었다. (HashSet은 중복을 허용하지 않기 때문)
Integer 형의 HashSet을 만들어주고, 유일한지 여부를 나타내는 boolean 타입의 변수 isUnique를 true로 초기화 시켜줬다.
HashSet<Integer> num = new HashSet<>();
boolean isUnique = true;
숫자들을 하나씩 입력받으며 HashSet에 추가하고, 만약 이미 HashSet에 해당 숫자가 존재한다면 isUnique를 false로 만들어주고 반복문을 빠져나온다.
for(int i = 0; i < N; i++) {
int inputNum = in.nextInt();
if(!num.add(inputNum)){
isUnique = false;
break;
}
}
isUnique가 true이면 'U'를 아니면 'D'를 출력해주면 된다.
Int형 배열을 사용해 풀으라는 이야기가 나왔기에 코드를 조금 변형해보았다.
Int형 배열 num을 만들어주고 isUnique 변수는 똑같이 두었다.
N만큼 for문을 돌며 num 배열에 숫자들을 저장해준 후 배열을 Arrays.sort 함수를 통해 정렬해준다.
이렇게 정렬이 되었으면 이제 현재 원소와 이전 원소만을 비교해주면 된다.
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int num[] = new int[N];
boolean isUnique = true;
for(int i = 0; i < N; i++){
num[i] = in.nextInt();
}
Arrays.sort(num);
이제 N만큼 돌며 num의 i번째 값과 i-1번째 값을 비교하며 만약 값이 같으면 isUnique 값을 false로 바꿔준 후 반복문을 빠져나온다.
for(int i = 1; i < N; i++) {
if (num[i] == num[i - 1]) {
isUnique = false;
break;
}
}
최종 코드
< HashSet >
import java.util.HashSet;
import java.util.Scanner;
public class P05_중복확인 {
public static void main(String[] args) {
// 중복이 존재하면 D 출력, 다 다르면 U 출력
Scanner in = new Scanner(System.in);
int N = in.nextInt();
HashSet<Integer> num = new HashSet<>();
boolean isUnique = true;
for(int i = 0; i < N; i++) {
int inputNum = in.nextInt();
if(!num.add(inputNum)){
isUnique = false;
break;
}
}
if(isUnique)
System.out.println("U");
else
System.out.println("D");
}
}
< Int형 배열 >
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
public class P05_중복확인 {
public static void main(String[] args) {
// 중복이 존재하면 D 출력, 다 다르면 U 출력
Scanner in = new Scanner(System.in);
int N = in.nextInt();
int num[] = new int[N];
boolean isUnique = true;
for(int i = 0; i < N; i++){
num[i] = in.nextInt();
}
Arrays.sort(num);
for(int i = 1; i < N; i++) {
if (num[i] == num[i - 1]) {
isUnique = false;
break;
}
}
if(isUnique)
System.out.println("U");
else
System.out.println("D");
}
}
'알고리즘 문제풀이 입문: 코딩테스트 대비 > 섹션 6. Sorting, Searching(정렬, 이분검색과 결정)' 카테고리의 다른 글
좌표 정렬 (compareTo) (0) | 2024.04.20 |
---|---|
장난꾸러기 (0) | 2024.04.19 |
Least Recently Used (0) | 2024.04.19 |
삽입 정렬 (0) | 2024.04.18 |
버블 정렬 (0) | 2024.04.18 |