21.08.28 기록

최대 1 분 소요

백준 알고리즘 10814 풀이

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

-이 문제 역시 Arrays.sort()에 Comparator를 사용한 알고리즘으로 풀이했다.

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

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

        StringTokenizer st;
        String[][] info = new String[N][2];
        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");
            info[i][0] = st.nextToken();
            info[i][1] = st.nextToken();
        }

        //info 배열의 인덱스 0번째 요소의 값을 정수형으로 비교하여 결과를 return한다.
        Arrays.sort(info, Comparator.comparingInt(e -> Integer.parseInt(e[0])));

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


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

-Person이라는 클래스를 만들고 객체를 생성하여 입력값을 저장하여 Arrays.sort를 사용하는 방법이 있다.
-또 하나의 방법은, StringBuilder를 배열처럼 사용하여 카운팅 정렬의 형태로 사용하는 것이다.

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

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

        //StringBuilder 배열을 카운텅 정렬 형태로 사용하기
        StringBuilder[] sbArr = new StringBuilder[201];
        for(int i = 0; i < sbArr.length; i++) {
            sbArr[i] = new StringBuilder();
        }

        StringTokenizer st;
        for(int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine(), " ");

            int age = Integer.parseInt(st.nextToken());
            String name = st.nextToken();

            //sbArr[age] 안에 "나이 이름" 저장
            sbArr[age].append(age).append(' ').append(name).append('\n');
        }

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

    }
}

카테고리:

업데이트: