https://www.acmicpc.net/problem/1181
백준 1181번 단어 정렬 문제 링크입니다.
핵심
여러가지 단어를 받고, 길이가 짧은 순으로 정렬하고, 길이가 같으면 사전 순으로 정렬시킨다.
정답 코드
import java.util.*;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int N = sc.nextInt();
String[] arr = new String[N];
ArrayList<String> List = new ArrayList<>();
for(int i=0; i<N;i++)arr[i]=sc.next();
Arrays.sort(arr,new Comparator<String>() {
public int compare(String s1, String s2){
if(s1.length()==s2.length())return s1.compareTo(s2);
else return s1.length() - s2.length();
}
});
for(int i =0; i<arr.length; i++) {
if(!List.contains(arr[i]))List.add(arr[i]);
}
for(String c : List)System.out.println(c);
}
}
해설
우선 N에는 받을 문자의 수를 넣는다. 이후 String 배열과 ArrayList를 선언한다.
ArrayList는 마지막에 중복을 제거한 값만을 넣기 위해 사용된다.
String 배열에 문자열을 대입한다.
compare를 오버라이딩하여 정렬을 재정의한다. 길이가 같으면 사전 순으로 정렬을 시킨다.
길이가 다르면 리턴값이 양수일 경우 바꾸고, 음수일 경우에는 바뀌지 않는다.
List.contains를 사용하여 중복을 제거한 값만 List에 넣는다.
개선점이나 오류가 있다면 댓글 부탁드립니다.
'PS > 알고리즘 문제풀이' 카테고리의 다른 글
[백준]10815번 숫자 카드(java) (0) | 2022.07.08 |
---|---|
[백준]18870번 좌표 압축(java) (0) | 2022.07.08 |
[백준]2798번 블랙잭(java) (0) | 2022.07.04 |
[백준]2108번 통계학(java) (1) | 2022.07.04 |
[백준]2581번 소수(java) (0) | 2022.07.04 |