알고리즘

[Java] 백준 1181 - 단어 정렬

곽곽 2022. 2. 19. 08:20

문제 설명

단어를 입력 받고 입력 받은 단어를 크기 순으로, 단어 순으로 출력한다.

 

입력

  • 첫째 줄: 단어 개수 N
  • 둘째 줄~: 단어

 

출력

단어를 크기 순(1순위), 단어 순(2순위)로, 같은 단어가 여러 개인 단어는 한 번만 출력

 

알고리즘 분류

풀이 방법

입력 받는 단어를 배열에 저장하고 배열을 sort한 뒤, 단어 길이를 1에서부터 최대 단어 길이까지 늘려가며 같은 단어 길이를 가지는 배열 요소를 출력한다.


JAVA

import java.io.*;
import java.util.*;
public class Main {
    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];
        int max=0;
        for(int i=0; i<N; i++) {
            arr[i]=br.readLine();
            if(arr[i].length()>max) max=arr[i].length();
        }
        Arrays.sort(arr);
        for(int k=1; k<=max; k++) {
            for(int j=0; j<N; j++) {
                if(arr[j].length()==k) {
                    if(j==0 || (j>0 && !(arr[j].equals(arr[j-1])))) System.out.println(arr[j]);
                }
            }
        }
    }
}

변수

타입 변수명 설명
int N 단어의 개수
String[] arr 단어 배열
int max 단어 최대 길이

코드 설명

  1. N에 입력 받을 단어의 개수 저장
  2. 단어를 입력 받아 arr에 저장
  3. 입력 받은 단어 길이가 max보다 클 경우, max를 현재 단어 길이로 재저장
  4. arr sort
  5. 단어 길이(k)를 1에서부터 max까지 늘려가면서 arr 요소 중 k와 같은 값일 때 출력

 

어려웠던 점

  • 배열에서 이전 인덱스 요소와 값이 다른 값만 출력하기 위해 arr\[j\].equals(arr\[j-1\])를 사용하였는데, 인덱스에러를 방지하기 위해 사용한 j>0 때문에 첫번째 요소를 출력시키지 못하는 문제가 발생하였음

 

새로 알게 된 점

  • 배열 내 요소끼리 비교할 때도 equals() 사용