21.08.27 기록

1 분 소요

백준 알고리즘 1181 풀이

🎆나의 풀이(메모리 27.9MB, 시간 436ms로 통과)

-입력값을 HashSet에 담아 중복 요소를 제거한 후 String 배열에 저장한다.
-저장한 배열을 Comparator를 사용한 Arrays.sort로 정렬하여 풀이했다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;

public class B1181 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

        HashSet<String> hs = new HashSet<>();
        for(int i = 0; i < N; i++) {
            hs.add(br.readLine());
        }

        String[] strArr = new String[hs.size()];
        Iterator<String> iterator = hs.iterator();
        int idx = 0;
        while(iterator.hasNext()) {
            strArr[idx++] = iterator.next();
        }

        Arrays.sort(strArr, (s1, s2) -> {
            if(s1.length() == s2.length()) {
                for(int i = 0; i < s1.length(); i++) {
                    if(s1.charAt(i) != s2.charAt(i)) {
                        return s1.charAt(i) - s2.charAt(i);
                    }
                }
            }
            return (s1.length() - s2.length());
        });

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < strArr.length; i++) {
            sb.append(strArr[i]).append("\n");
        }
        System.out.println(sb);
    }
}


🎆해설(메모리 24.4MB, 시간 356ms로 통과)

-비교하는 두 문자열의 길이가 같은 경우 compareTo 메소드를, 중복 제거는 for문을 사용했다.

  • compareTo(String 클래스)
    두 문자열을 사전순으로 비교하는 메소드이다.
    주어진 문자열이 인수로 받은 문자열보다 사전순으로 앞서면 음수값을 반환하고,
    아닌 경우 양수값을 반환한다.
    두 문자열이 같을 때엔 0을 반환한다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class B1181 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int N = Integer.parseInt(br.readLine());

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

        Arrays.sort(strArr, (s1, s2) -> {
            if(s1.length() == s2.length()) { return s1.compareTo(s2); }
            else { return (s1.length() - s2.length()); }
        });

        StringBuilder sb = new StringBuilder();
        sb.append(strArr[0]).append('\n');
        for(int i = 1; i < strArr.length; i++) {
            if(!strArr[i].equals(strArr[i-1]))
            sb.append(strArr[i]).append("\n");
        }
        System.out.println(sb);
    }
}

카테고리:

업데이트: