▶https://www.acmicpc.net/problem/1181
<문제>
알파벳 소문자로 이루어진 N개의 단어가 들어오면 아래와 같은 조건에 따라 정렬하는 프로그램을 작성하시오.
- 길이가 짧은 것부터
- 길이가 같으면 사전 순으로
단, 중복된 단어는 하나만 남기고 제거해야 한다.
<코드>
import java.util.Arrays;
import java.util.Scanner;
import java.util.Comparator;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
sc.nextLine(); //개행문자 제거
String[] arr = new String[n];
for (int i=0; i<n; i++) { //인덱스 0부터 시작
arr[i] = sc.nextLine();
}
//정렬하기
Arrays.sort(arr, new Comparator<String>() {
@Override
public int compare(String s1, String s2) {
if (s1.length() == s2.length()) {
return s1.compareTo(s2); //길이가 같으면 사전 순 정렬
} else {
return s1.length() - s2.length(); //길이 기준 정렬
}
}
});
//중복제거
System.out.println(arr[0]); //첫번째 단어 출력
for(int i=1; i<n; i++){ //배열의 두번째 단어부터 마지막 단어까지 반복
if(!arr[i].equals(arr[i-1])){ //현재 단어가 이전 단어와 다르면 출력한다
System.out.println(arr[i]);
}
}
}
}
- Comparator에 있는 compare메소드를 오버라이딩해준다.
- s1.length() - s2.length() 에서 양수인지 음수인지 비교한다음 길이 기준으로 정렬해준다.
'Algorithm' 카테고리의 다른 글
[백준/java] 10039 평균 점수 (0) | 2024.09.04 |
---|---|
[백준/java] 2750 수 정렬하기 (0) | 2024.08.09 |
[백준/java] 20492 세금 (0) | 2024.08.07 |
[백준/java] 5063 TGN (0) | 2024.08.06 |
[백준/java] 2935 소음 (0) | 2024.08.06 |