Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags more
Archives
Today
Total
관리 메뉴

공부블로그

[백준] 1181 본문

IT/알고리즘

[백준] 1181

So1_b 2022. 9. 19. 20:11

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