728x90
반응형
2024.06.18기준 - 실버5
백준, BEAKJOON, BOJ, JAVA, 자바
풀이
이 문제는 입력받은 정보를 통해 조건문을 이용해 정확히 커플인 사람들 이름을 출력하는 문제입니다.
저의 접근은
1. 반지의 특성을 key로 갖고 이름을 여러개 저장할 수 있는 map를 생성했습니다.
// 반지의 특징을 key 이름을 value로 하는 map
Map<String, StringBuilder> map = new LinkedHashMap<>();
※ StringBuilder를 사용한 이유는 하나의 반지의 특성에 여러 개의 이름을 저장하기 위해,
나중에 출력을 할때 map value값을 통해서만 출력하기 위함입니다.
2. 생성된 map에 반지를 끼고 있는 사람이라면 저장을 해주었습니다.
2-1. 이미 저장된 map이 있다면 추가로 이름을 추가해주었습니다.
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
name = st.nextToken();
distinct = st.nextToken();
if (!distinct.equals("-")) { // 반지를 끼고 있으면
if (map.containsKey(distinct)) { // 이미 반지를 끼고 있는 사람이 있다면
map.put(distinct, map.get(distinct).append(" ").append(name));
} else {
map.put(distinct, new StringBuilder().append(name));
}
}
}
3. 반지의 특성에 저장되어 있는 이름이 정확히 2개인지 체크를 해줬습니다.
※ 처음에는 map에 다가 remove를 해주었는데 그러면 ConcurrentModification 오류가 발생하는걸 알게되었습니다.
// 커플을 저장할 리스트
List<String> names = new LinkedList<>();
// 짝이 정확히 2명만 저장
for (String s : map.keySet()) {
st = new StringTokenizer(map.get(s).toString());
if (st.countTokens() == 2) {
names.add(map.get(s).toString());
}
}
4. 저장된 이름과 커플 수를 출력해 주었습니다.
코드
package Main;
import java.io.*;
import java.util.*;
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));
StringBuilder sb = new StringBuilder();
int n = Integer.parseInt(br.readLine()); // 약지를 확인한 사람의 수
// 반지의 특징을 key 이름을 value로 하는 map
Map<String, StringBuilder> map = new LinkedHashMap<>();
String name, distinct;
StringTokenizer st;
while (n-- > 0) {
st = new StringTokenizer(br.readLine());
name = st.nextToken();
distinct = st.nextToken();
if (!distinct.equals("-")) { // 반지를 끼고 있으면
if (map.containsKey(distinct)) { // 이미 반지를 끼고 있는 사람이 있다면
map.put(distinct, map.get(distinct).append(" ").append(name));
} else {
map.put(distinct, new StringBuilder().append(name));
}
}
}
// 커플을 저장할 리스트
List<String> names = new LinkedList<>();
// 짝이 정확히 2명만 저장
for (String s : map.keySet()) {
st = new StringTokenizer(map.get(s).toString());
if (st.countTokens() == 2) {
names.add(map.get(s).toString());
}
}
sb.append(names.size()).append("\n");
for (String s : names) {
sb.append(s).append("\n");
}
bw.write(sb.toString());
bw.flush();
bw.close();
br.close();
}
}
728x90
반응형
'코딩테스트 일기 (BAEKJOON)' 카테고리의 다른 글
BAEKJOON / 백준 - JAVA 31846번 문자열 접기 (0) | 2024.06.20 |
---|---|
BAEKJOON / 백준 - JAVA 31909번 FOCUS (0) | 2024.06.19 |
BAEKJOON / 백준 - JAVA 31925번 APC2shake! (0) | 2024.06.17 |
BAEKJOON / 백준 - JAVA 31924번 현대모비스 특별상의 주인공은? 2 (0) | 2024.06.16 |
BAEKJOON / 백준 - JAVA 31883번 FA수의 진 (2) | 2024.06.14 |