백준알고리즘
백준알고리즘:p1181 단어정렬
socialcomputer
2021. 4. 7. 00:08
반응형
분류: 정렬
▶문제
즉, 길이가 짧은게 먼저 나오도록 하고 길이가 같다면 알파벳순으로 정렬해라.
중복은 제거해라.
▶코드
//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨
package sort;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
public class p1181 {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
ArrayList<String> list = new ArrayList<>();
for(int i=0; i<n; i++) {
list.add(br.readLine());
}
//hashSet으로 중복제거
HashSet<String> set = new HashSet<String>(list);
ArrayList<String> list2 = new ArrayList<>(set);
Collections.sort(list2,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();
}
}
});
StringBuilder sb = new StringBuilder();
for(String li : list2) {//중복제거로 list2의 길이가 list와 달라졌기 때문에 이렇게 해야됨.
sb.append(li+"\n");
}
System.out.print(sb);
}
}
▶comparator 인터페이스 사용해서 풀기.
compare 메소드 오버라이드 할때:
길이가 같으면 알파벳순인데 처음에 s1과 s2의 charAt(0)만 비교해서 틀림
-> compareTo를 이용해 return 해줬음.
this.compareTo(another)는 this>another 이면 양수, this=another 이면 0, this<another이면 음수 리턴함
채점결과
링크 www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
반응형