미소를뿌리는감자의 코딩

[백준 2024/01/29] 10814번 나이순 정렬 본문

코딩 테스트/백준

[백준 2024/01/29] 10814번 나이순 정렬

미뿌감 2024. 1. 30. 00:01
728x90

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

 

10814번: 나이순 정렬

온라인 저지에 가입한 사람들의 나이와 이름이 가입한 순서대로 주어진다. 이때, 회원들을 나이가 증가하는 순으로, 나이가 같으면 먼저 가입한 사람이 앞에 오는 순서로 정렬하는 프로그램을

www.acmicpc.net

 

1. 접근 방법

처음에는 map을 이용해서, 값을 넣은 후 정렬을 하려고 하였다.

하지만, map에 저장 후 정렬을 시도하였을 때, 중복된 key(나이)값의 일부를 잃어버렸다.

 

만약, key를 이름으로 하고 value로 나이로 하고 value를 기준으로 sort하려고 시도하였을 때,

코드를 적을 순 있지만 너무 많이 돌아가는 느낌이어서 다르게 접근해야겠다고 생각했다.

 

따라서 list 중에 integer와 string 둘다 포함 할 수 있도록 선언하는 방법에 대해서 알아보았다.

List<Object[]> list = new ArrayList<>();

 

Object[]를 통해서 Integer값과 String 값 모두 넣을 수 있었다.

list.add(new Object[]{age, name});

 

이런식으로 값마다 object를 형성해서 list에 넣어주었고,

collection 메서드로 정렬해주었다.

 

다음으로, 값을 접근하려고 했을 때 당황하였다.

list.get(i).get(0) 이런식으로 접근이 되지 않았고

System.out.println(list.get(i)[0]+" "+list.get(i)[1]);

 

이런식으로 접근해야했다.

list.get(i)[0] 왜냐하면 get(i).get(0)은 list 안에 list가 있을 때 해당하는 경우이고, 이번에는 list안에 object에 대해서 접근하는 것이니,

 

즉, 처음에는 get(i)로 list로 접근해주고, object에 대해서는 [0] 으로 접근해주었다.

 

2. 코드

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


public class b10814 {
    public static void main(String[] args) throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        List<Object[]> list = new ArrayList<>();

        int num = Integer.parseInt(reader.readLine());

        for(int i =0; i<num ; i++){
            String[] xy = reader.readLine().split("\\s+");
            List<Integer> sub_list = new ArrayList<>();
            int age = Integer.parseInt(xy[0]);
            String name = xy[1];
            list.add(new Object[]{age, name});
        }

        Collections.sort(list, Comparator.comparingInt(a-> (Integer) a[0]));

        for(int i =0; i< num; i++){
            System.out.println(list.get(i)[0]+" "+list.get(i)[1]);
        }

    }
}
728x90