미소를뿌리는감자의 코딩
[백준 2024/01/29] 10814번 나이순 정렬 본문
728x90
https://www.acmicpc.net/problem/10814
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
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준 2024/02/01] b1271 엄청난 부자2 (0) | 2024.02.01 |
---|---|
[백준 2024/01/30] 4999번 아! (1) | 2024.01.31 |
[백준 2024/01/28] 11650번 좌표 정렬하기 (1) | 2024.01.29 |
[백준 2024/01/27] 11286번 절댓값 힙 (0) | 2024.01.27 |
[백준 2024/01/26] 1259번 팰린드롬수 (0) | 2024.01.27 |