250x250
반응형
Notice
Recent Posts
Recent Comments
Link
종식당
[백준 1181 with JAVA] 단어 정렬 본문
728x90
반응형
https://www.acmicpc.net/problem/1181
📝 문제 설명
문자열을 N개 입력받은 후 길이가 짧은 것부터 만약 길이가 같다면 사전 순으로 정렬해서 출력하면 된다.
✨ 제출 코드
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int N = Integer.parseInt(br.readLine());
List<String> lst = new ArrayList<>();
HashSet<String> set = new HashSet<>();
for(int i = 0; i < N; i++){
set.add(br.readLine());
}
for(String str : set){
lst.add(str);
}
Collections.sort(lst,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();
}
}
});
for(String str : lst){
System.out.println(str);
}
}
}
✌️ 코드 설명
먼저 중복을 제거하기 위해 처음에 입력받을 때 set에 입력을 받았고 이를 리스트에 다시 넣어서 조건에 맞게 정렬을 한 이후에 출력을 해주었다.
😎 마무리
먼저 자바에서 정렬에 대해서 보겠다.
배열을 정렬할 때는 Arrays.sort(), 리스트를 정렬할 때는 Collections.sort()이다.
이때, 특정 조건에 따라 정렬을 하고 싶다면 Comparator인터페이스를 구현하여 sort메서드에 전달할 수 있다.
Collections.sort(lst, 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();
}
}
});
Comparator 인터페이스를 통해 두 객체를 비교하는 방법을 정의한다.
문자열의 길이를 비교할 때는 Comparator 인터페이스의 메서드인 compare(String s1, String s2)를 통해 정렬을 진행한다.
- 음수: s1이 s2보다 앞에 와야 함
- 0: s1과 s2는 같은 순서로 간주
- 양수: s1이 s2보다 뒤에 와야 함
문자열의 길이가 같을때는 compareTo를 이용하여 사전순으로 비교한다.
728x90
반응형
'백준' 카테고리의 다른 글
[백준 2161 with JAVA] 카드1 (0) | 2025.02.28 |
---|---|
[백준 18870 with JAVA] 좌표 압축 (0) | 2025.02.08 |
[백준 1316 with JAVA] 그룹 단어 체커 (2) | 2025.01.30 |
[백준 14719 with JAVA] 빗물 (3) | 2025.01.29 |
[백준 7562] 나이트의 이동 (1) | 2025.01.06 |