01
09
๋ฐ˜์‘ํ˜•

 

https://www.acmicpc.net/problem/10814

 

10814๋ฒˆ: ๋‚˜์ด์ˆœ ์ •๋ ฌ

์˜จ๋ผ์ธ ์ €์ง€์— ๊ฐ€์ž…ํ•œ ์‚ฌ๋žŒ๋“ค์˜ ๋‚˜์ด์™€ ์ด๋ฆ„์ด ๊ฐ€์ž…ํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฃผ์–ด์ง„๋‹ค. ์ด๋•Œ, ํšŒ์›๋“ค์„ ๋‚˜์ด๊ฐ€ ์ฆ๊ฐ€ํ•˜๋Š” ์ˆœ์œผ๋กœ, ๋‚˜์ด๊ฐ€ ๊ฐ™์œผ๋ฉด ๋จผ์ € ๊ฐ€์ž…ํ•œ ์‚ฌ๋žŒ์ด ์•ž์— ์˜ค๋Š” ์ˆœ์„œ๋กœ ์ •๋ ฌํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์„

www.acmicpc.net


import java.io.FileInputStream;
import java.util.*;

class Main{
    public static void main(String[] args) throws Exception{
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        String[] arr = new String[n];
        sc.nextLine();
        for(int i=0; i<n; i++){
            arr[i] = sc.nextLine();
        }
        int[] ageSize = new int[n];

        StringBuilder sb = new StringBuilder();
        int idx = 0;
        for(String input : arr){
            String[] sp = input.split(" "); // ์•ž ์›์†Œ๊ฐ€ ๋‚˜์ด
            ageSize[idx++] = Integer.parseInt(sp[0]);
        }
        Arrays.sort(ageSize);
        int cnt = 0;
        while(cnt < n){
            for(String input : arr){
                String[] sp = input.split(" "); // ์•ž ์›์†Œ๊ฐ€ ๋‚˜์ด
                if(ageSize[cnt] == Integer.parseInt(sp[0])){
                    if(sb.indexOf(input) == -1){
                        sb.append(input).append("\n");
                        break;
                    }
                }
            }
            cnt++;
        }

        System.out.println(sb);
        sc.close();
    }
}

์˜ค๋‹ต๋…ธํŠธ(ํ‘ธ๋Š” ๋™์•ˆ ์‚ฌ๊ณ ๊ณผ์ • ๋ฐ ๊ฐœ์„ ์ )

๋‹จ์ˆœํ•˜๊ฒŒ ์ƒ๊ฐํ•ด์„œ ํ’€์—ˆ๋Š”๋ฐ ์‹œ๊ฐ„์ดˆ๊ณผ๊ฐ€ ๋‚˜๋ฒ„๋ ธ๋‹ค. ์ฒ˜์Œ๋ถ€ํ„ฐ ๋กœ์ง์„ ๋‹ค์‹œ ์งœ์•ผ๋˜๋‚˜..


์ •๋‹ต์ฝ”๋“œ

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.StringTokenizer;

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());

        List<String[]> members = new ArrayList<>();

        for (int i = 0; i < N; i++) {
            StringTokenizer st = new StringTokenizer(br.readLine());
            int age = Integer.parseInt(st.nextToken());
            String name = st.nextToken();
            members.add(new String[]{Integer.toString(age), name});
        }

        members.sort((m1, m2) -> {
            if (m1.age == m2.age) {
                return 0;
            }
            return m1.age < m2.age ? -1 : 1;
        });

        for (String[] member : members) {
            System.out.println(member[0] + " " + member[1]);
        }
    }
}

 

์—ฌ๊ธฐ์„œ ๋‚˜๋จธ์ง€๋Š” ์–ด์ฐจํ”ผ ๋˜‘๊ฐ™์€ ๊ตฌ์กฐ๋‹ˆ๊นŒ ์ •๋ ฌ ๋ถ€๋ถ„๋งŒ ๋ณด๋„๋ก ํ•˜์ž. ๋žŒ๋‹ค์‹์„ ์‚ฌ์šฉํ•ด๋ดค๋‹ค.

members.sort((m1, m2) -> {
    if (m1.age == m2.age) {
        return 0;
    }
    return m1.age < m2.age ? -1 : 1;
});

Collections์— ์žˆ๋Š” sort๋Š” Comparator์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ๋žŒ๋‹ค์‹์œผ๋กœ ์ค„์—ฌ์„œ ์“ฐ๋Š” ๊ฒฝ์šฐ๋‹ค. m1, m2๋Š” ๋น„๊ตํ•  ๋‘ ๊ฐ์ฒด์ด๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” List๋ฅผ ๊ฐ–๋Š” member๊ฐ€ ๋œ๋‹ค.

Comparator์˜ sort๋ฅผ overrideํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, 0, -1, 1์˜ ๋ฐ˜ํ™˜ ๊ฐ’ ์ฐจ์ด๋งŒ ์ดํ•ดํ•˜๋ฉด ๋์ด๋‹ค. ์ด ์ฝ”๋“œ์—์„œ 0์€ ์ •๋ ฌ ๋ฐฉํ–ฅ ๊ทธ๋Œ€๋กœ, -1์ด๋ฉด m1์ด m2๋ณด๋‹ค ์ž‘์€๊ฑธ๋กœ ๋ฐฐ์น˜, 1์ด๋ฉด m1์ด m2๋ณด๋‹ค ํฐ๊ฑฐ๋กœ ๋ฐฐ์น˜ํ•œ๋‹ค.

 

0์ผ ๋•Œ ์ˆœ์„œ๊ฐ€ ๋ฐ”๋€” ์ˆ˜๋„ ์žˆ์ง€์•Š๋Š๋ƒ ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋•Œ Collections.sort๋Š” ์ž…๋ ฅ๋œ ์ˆœ์„œ๋ฅผ ์œ ์ง€ํ•˜๋ฉด์„œ ์ •๋ ฌํ•ด์ค€๋‹ค. stable ์ •๋ ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์„ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

๋„์›€์ด ๋๋‹ค๋ฉด ๋Œ“๊ธ€์ด๋‚˜ ๊ณต๊ฐ ๋ฒ„ํŠผ ํ•œ ๋ฒˆ์”ฉ ๋ˆ„๋ฅด๊ณ  ๊ฐ€์ฃผ์„ธ์š”! ๋กœ๊ทธ์ธ ์•ˆํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค ^_^

 

๋ฐ˜์‘ํ˜•
COMMENT