[백준] 1181번: 단어 정렬 (Java)

seri·2024년 6월 26일
0

코딩테스트 챌린지

목록 보기
3/62
post-custom-banner

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

📌 문제 탐색하기

입력 : 첫째 줄 - 단어 개수 (1 ≤ 단어 개수 ≤ 20,000)
둘째 줄부터 - 알파벳 소문자로 이루어진 단어 (1 ≤ 길이 ≤ 50)
출력 : 길이 오름차순으로 단어 출력. 단, 길이가 같으면 사전 순으로 먼저 출력하고,
중복된 단어는 하나만 출력한다.

가능한 시간복잡도

O(NlogN)

알고리즘 선택

팀소트 알고리즘

📌 코드 설계하기

  1. 첫째 줄에 단어를 Input으로 받는다.
  2. 둘째 줄부터 알파벳 소문자로 이루어진 단어들을 Input으로 받는다.
  3. Arrays.sort, Comparator를 사용해 단어를 정렬한다.
  4. LinkedHashSet을 사용해 중복을 제거하고, 단어를 출력한다.

📌 시도 회차 수정 사항 (Optional)

💡 시도별 수정 사항은 어떻게 작성하나요?
- 무문별하게 “맞았습니다”가 나올때 까지 수정하는 형태의 문제 풀이를 반복하면 , 내가 어떤 실수를 해서 해당 문제를 틀렸는지 모르게 됩니다.
- 틀렸습니다를 받았다면 왜 틀렸는지 고민해보고 , 어떻게 수정할 수 있는지 고민하는 과정을 작성해주시면 됩니다.
- 위에 내가 세울 설계에서 어떤 부분이 틀렸는지도 함께 점검해보세요
- 한번에 맞출수도 있기 때문에 이 칸은 Optional입니다.

1회차

sc.nextLine(); 를 사용한다면 남아있는 개행 문자를 소비해야 한다.

sc.next(): 공백, 탭, 엔터를 기준으로 단어 단위로 입력을 읽음.
sc.nextLine(): 엔터(줄바꿈 문자)를 기준으로 한 줄 전체를 입력을 읽음.

2회차

📌 정답 코드

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        
        int N = sc.nextInt();
        sc.nextLine(); //개행 문자 소비
        String[] words = new String[N];
        
        for (int i = 0; i < N; i++) {
            words[i] = sc.nextLine();
        }
        
        Arrays.sort(words, new Comparator<String>() {
            public int compare(String a, String b) {
                if (a.length() == b.length()) {
                    return a.compareTo(b);
                } else {
                    return a.length() - b.length();
                }
            }
        });
        
        Set<String> uniqueWord = new LinkedHashSet<>(Arrays.asList(words));
        
        for (String word : uniqueWord) {
            System.out.println(word);
        }
        
        sc.close();
    }
}

또는 - 개행문자 제거 없이 next(); 사용

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int N = sc.nextInt(); 
        
        String[] words = new String[N];

        for (int i = 0; i < N; i++) {
            words[i] = sc.next();
        }

        Arrays.sort(words, new Comparator<String>() {
            public int compare(String a, String b) {
                if (a.length() == b.length()) {
                    return a.compareTo(b);
                } else {
                    return a.length() - b.length();
                }
            }
        });

        Set<String> uniqueWords = new LinkedHashSet<>(Arrays.asList(words));

        for (String word : uniqueWords) {
            System.out.println(word);
        }

        sc.close();
    }
}
profile
꾸준히 정진하며 나아가기
post-custom-banner

0개의 댓글