공부블로그
[백준] 1181 본문
https://www.acmicpc.net/problem/1181
1181번: 단어 정렬
첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다.
www.acmicpc.net
[문제 해석]
1. set에 String을 입력받아 중복을 없앤다.
2. 컬렉션 정렬 메소드 Collections.sort( list, Comparator)를 사용한다.
이때 ArrayList(Collection c)생성자를 이용해 set -> list로 변경한다.
기본 정렬이 아닌 사용자 정의 정렬기준을 사용하기 위해 두번째 매개변수에 Comparator객체 전달
> Comparator의 compare(T t1, Tt2)를 람다로 간략화
String클래스에 대소문자 상관하지 않고 사전정렬하는 Comparator존재
( 정적 내부 클래스인 CaseInsensitiveComparator으로 compare()정의 됨.)
3. Scanner의 nextInt(), nextLine() 차례대로 사용하려면 개행 제거 후 사용
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
HashSet<String> set = new HashSet<String>();
int count = scan.nextInt();
scan.nextLine(); //개행버림
for(int i=0; i<count; i++)
set.add(scan.nextLine().trim());
scan.close();
List<String> list = new ArrayList<String>(set);
Collections.sort(list,
(String s1, String s2) -> {
int s1Leng = s1.length();
int s2Leng = s2.length();
if(s1Leng > s2Leng) return 1;
else if(s1Leng < s2Leng) return -1;
else
return String.CASE_INSENSITIVE_ORDER.compare(s1,s2);
});
for(String s: list)
System.out.println(s);
}
}
'IT > 알고리즘' 카테고리의 다른 글
[프로그래머스] 성격 유형 검사하기 (0) | 2022.10.07 |
---|---|
[프로그래머스] 최소 직사각형 (2) | 2022.09.30 |
[백준] 10817 (0) | 2022.09.18 |
[백준] 2750 (0) | 2022.09.18 |
[프로그래머스] 1차 다트게임 (0) | 2022.09.13 |
Comments