[붙끝코] 3일차 (백준1181번)

Burpeeeee·2024년 9월 11일

📌 문제 탐색하기

  1. 단어의 갯수 N 입력
  2. 알파벳 소문자로 이루어진 단어 하나씩 입력
  3. 문자열의 길이가 오름차순으로 정렬됨
  • 문자열의 길이가 같을 경우 알파벳 순으로
  • 중복되는 경우는 한번만

📌 코드 설계하기

  • 어떠한 규칙에 있어서 정렬 Arrays.sort 메소드에 Comparator 을 구현 ->시간복잡도는 O(nlogn)
  • 1순위 단어 길이순 2순위 사전 순
    ->compare 메소드에서 if 조건문을 통해 단어길이를 비교후 같을 경우 사전순으로 정렬하도록 하고 그 외에는 단어 길이순으로 정렬.
  • BufferedReader + StringBuilder 성능 개선

📌 시도 회차 수정 사항

📌 정답 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Comparator;


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

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int n = Integer.parseInt(br.readLine());

        String[] arr = new String[n];
        for (int i = 0; i < n; i++) {
            arr[i] = br.readLine();
        }

        Arrays.sort(arr, new Comparator<String>() {
            public int compare(String o1, String o2) {
                // 길이가 같으면 사전 순으로 배열한다.
                if (o1.length() == o2.length()) return o1.compareTo(o2);
                else return o1.length() - o2.length();
            }
        });

        StringBuilder sb = new StringBuilder();
        sb.append(arr[0]).append('\n');

        for (int i = 1; i < n; i++) {
           
            if (arr[i].equals(arr[i - 1])) {
                continue; // 현재 단어 이전단어 같은 경우는 건너뜀
            }
            sb.append(arr[i]).append('\n');
        }

        System.out.println(sb);
    }
}


profile
? 이 가득하지만 곧 !이 될

0개의 댓글