천리길도 한걸음부터

Day3. 단어 정렬 본문

20일 1일 1코테

Day3. 단어 정렬

밤연양갱 2025. 5. 3. 11:36

문제

https://www.acmicpc.net/problem/1181

 

풀이

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Array;
import java.util.*;

public class Day3 {
    public static void main(String[] args) throws IOException {

        // 1. 입력 받기 위한 준비
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 2. 영어단어 갯수
        int N = Integer.parseInt(br.readLine());

        // 3. 단어 저장할 HashSet 선언 (중복x)
        Set<String> set = new HashSet<>(); // HashSet은 Key-value가 아니라, 값만 저장하는 Set 구조 -> 제네릭 타입은 한 개만 써야 한다
        //List<String, String> set = new HashSet<>(); -> 노우!

        // 4. 영어 단어 입력받기
        for (int i=0; i<N; i++) {
            String str = br.readLine(); // 한 줄에 하나씩 단어 들어옴...
            set.add(str);
        }
        //StringTokenizer st = new StringTokenizer(br.readLine()); -> 한 줄에 여러 단어 있을때만 필요..

        // 5. List로 변환 후 정렬
        List<String> list = new ArrayList<>(set);
        Collections.sort(list, (a, b) -> {

           // 1차 기준
           if ( a.length() != b.length()) return a.length() - b.length();
           // 2차 기준
           return a.compareTo(b);
        });

        // 6. 출력
        StringBuilder sb = new StringBuilder();
        for (String word : list) {
            sb.append(word).append("\n");
        }
        System.out.println(sb);
    }
}

 

✔ Collcetions.sort() : Java의 컬렉션 프레임워크에서 제공하는 공식 유틸리티 메서드

 

✔ Collections.sort()  기본형

Collections.sort(리스트);

- 기본 정렬 기준 : 오름차순 (Comparable 기준)

숫자 -> 작은 것부터

문자열 -> 알파벳 순서

 

✔  커스텀 정렬 (Comparator 사용)

Collections.sort(리스트, (a, b) ->

    // 정렬 기준 정의

}

 

✔ 대표예시

숫자 오름차순 Collections.sort(list);

숫자 내림차순 Collections.sort(list, (a, b) -> b - a)

문자열 길이순 Collections.sort(list, (a, b) -> a.length - b.length())

문자열 길이순 + 알파벳순 (a, b) -> a.length() != b.length? a.length() - b.length() : a.compareTo(b)

 

Map의 key/value를 정렬하려면 List로 변환 후 이걸 써야 함~~~

 

✔ 외울거

Collections.sort(list, (a, b) -> {

    // 1차 기준

    if (a.length() != b.length()) {

        return a.length() - b.length();

    }

    // 2차 기준

    return a.compareTo(b);

});

 

 

'20일 1일 1코테' 카테고리의 다른 글

Day4. 두 수의 합  (0) 2025.05.04
Day2. 숫자 카드2  (0) 2025.05.01
Day1. 숫자 정렬 문제  (0) 2025.05.01