☕Language: Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
Map<Integer, ArrayList<String>> listMap = new HashMap<>();
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
if (!listMap.containsKey(age)) {
listMap.put(age, new ArrayList<>());
}
listMap.get(age).add(name);
}
Object[] mapKeys = listMap.keySet().toArray();
Arrays.sort(mapKeys);
for (Object key : mapKeys) {
for (String s : listMap.get(key)) {
bw.write(key + " " + s + "\n");
}
}
bw.flush();
bw.close();
}
}
|
🤔 해설
1. Map<Integer, ArrayList<String>> listMap = new HashMap<>();
- Key를 나이로, Value는 이름으로 선언하되
- Key가 중복되지 않으므로, Value를 List로 선언
- 자료 타입: (21, {Junkyu, Dohyun})
2. listMap.put(age, new ArrayList<>());
- Key값이 기존 map에 없을 경우, List 생성
3. listMap.get(age).add(name);
- map에 생성된 List에 이름 추가
- List는 입력 순서를 유지
4. Arrays.sort(mapKeys);
- key값인 나이에 따라 오름차순
😮 찾아본 풀이
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
String[][] sArr = new String[N][2];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine());
sArr[i][0] = st.nextToken();
sArr[i][1] = st.nextToken();
}
Arrays.sort(sArr, new Comparator<String[]>() {
@Override
public int compare(String[] s1, String[] s2) {
return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
}
});
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
sb.append(sArr[i][0] + ' ' + sArr[i][1] + '\n');
}
bw.write(sb + "");
bw.flush();
bw.close();
}
}
|
1. return Integer.parseInt(s1[0]) - Integer.parseInt(s2[0]);
- s1의 0번째 요소로 오름차순 정렬
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Arrays;
import java.util.Comparator;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
Participant[] pArr = new Participant[N];
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
pArr[i] = new Participant(age, name);
}
Arrays.sort(pArr, new Comparator<>() {
@Override
public int compare(Participant p1, Participant p2) {
return p1.age - p2.age;
}
});
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
sb.append(pArr[i].toString());
}
bw.write(sb + "");
bw.flush();
bw.close();
}
public static class Participant {
int age;
String name;
public Participant(int age, String name) {
this.age = age;
this.name = name;
}
@Override
public String toString() {
return age + " " + name + "\n";
}
}
}
|
1. Participant[] pArr = new Participant[N];
- Participant class 생성: 필드 - age, name
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
int N = Integer.parseInt(br.readLine());
StringBuilder[] sbArr = new StringBuilder[201];
for (int i = 0; i < sbArr.length; i++) {
sbArr[i] = new StringBuilder();
}
for (int i = 0; i < N; i++) {
StringTokenizer st = new StringTokenizer(br.readLine(), " ");
int age = Integer.parseInt(st.nextToken());
String name = st.nextToken();
sbArr[age].append(age + " " + name + "\n");
}
StringBuilder sb = new StringBuilder();
for (StringBuilder stringBuilder : sbArr) {
sb.append(stringBuilder);
}
bw.write(sb + "");
bw.flush();
bw.close();
}
}
|
1. StringBuilder[] sbArr = new StringBuilder[201];
- 나이만큼 StringBuilder 배열 생성
2. sbArr[age].append(age + " " + name + "\n");
- 나이와 동일한 배열의 순번에 나이 및 이름 입력
3. for (StringBuilder stringBuilder : sbArr) {...}
- 나이가 입력되지 않은 StringBuffer는 출력되지 않으므로 모든 sbArr 출력
⭐ StringBuilder()와 StringBuilder() 차이
StringBuilder()
- 동기화 처리 방식
- 멀티 스레드 환경에서 안전
- 단일 스레드 환경에서는 동기화 추가 비용으로 인한 성능 저하가 발생할 수 있음
StringBuilder()
- 비동기화 처리 방식
- 멀티 스레드 환경에서 불안정
- 동기화 처리를 하지 않으므로 단일 스레드 환경에서 속도가 빠름
🔗 소스 코드
HJ0216/TIL/BOJ
📚 참고 자료
'Computer > Algorithm_Java' 카테고리의 다른 글
[BaekJoon] 18870번 좌표 압축 문제 풀이 (Success) (0) | 2023.08.23 |
---|---|
[BaekJoon] 1037번 약수 문제풀이 (Success) (0) | 2023.08.17 |
[BaekJoon] 1181번 단어 정렬 문제풀이 (Success) (0) | 2023.08.15 |
[BaekJoon] 1018번 체스판 다시 칠하기 문제풀이 (Success) (0) | 2023.08.14 |
[BaekJoon] 10816번 숫자 카드 2 문제풀이 (Success) (0) | 2023.08.13 |