문제(출처: https://www.acmicpc.net/problem/30949)
< Equal Schedules >
문제 풀이
HashMap을 사용하여 첫 번째 일정은 -로 저장하고 두 번째 일정은 +로 저장해 0이 아닌 값들을 출력한다.
my solution (Java)
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.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.StringTokenizer;
public class _30949_ { // Equal Schedules
public static void main(String[] args) throws IOException {
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st;
String str = "";
HashMap<String, Integer> map = new HashMap<>();
boolean flag = false;
while (!(str = bf.readLine()).equals("======")) {
if (str.equals("------")) {
flag = true;
continue;
}
st = new StringTokenizer(str);
int x = Integer.parseInt(st.nextToken());
int y = Integer.parseInt(st.nextToken());
String name = st.nextToken();
if (flag) {
if (map.containsKey(name)) {
map.replace(name, map.get(name) + (y - x));
} else {
map.put(name, y - x);
}
} else {
if (map.containsKey(name)) {
map.replace(name, map.get(name) - (y - x));
} else {
map.put(name, -(y - x));
}
}
}
Set<String> set = new HashSet<>(map.keySet());
for (String name : set) {
if (map.get(name) == 0) {
map.remove(name);
}
}
if (map.size() == 0) {
bw.write("No differences found.");
} else {
ArrayList<String> list = new ArrayList<>(map.keySet());
Collections.sort(list);
for (String name : list) {
bw.write(name + " ");
if (map.get(name) > 0) {
bw.write("+" + map.get(name) + "\n");
} else {
bw.write(map.get(name) + "\n");
}
}
}
bw.flush();
}
}
변수)
str : 입력값
map : 두 일정 차이
flag : 첫 번째 일정인지 두 번째 일정인지 판별
x, y, name : 일정
set, list : HashMap key -> Set, ArrayList
" ====== " 입력이 들어오기 전까지 다음 과정을 반복한다.
1) " ------ "가 입력으로 들어왔다면 다음 입력부터는 두 번째 일정이므로 flag를 true로 저장한다.
2) 일정을 입력받아 첫 번째 일정이라면 -로 저장, 두 번째 일정이라면 +로 저장한다.
HashMap의 value를 살펴보여 값이 0이라면 key와 value를 제거한다. HashMap의 크기가 0이라면 " No differences found."를 출력하고, 0이 아니라면 key 값을 오름차순으로 정렬해 각 key와 value를 출력한다.
'🌞Algorithm > 🔥Baekjoon' 카테고리의 다른 글
[Baekjoon] 10442_Rank Order (1) | 2025.07.24 |
---|---|
[Baekjoon] 15426_GlitchBot (3) | 2025.07.23 |
[Baekjoon] 9400_Calculate the Fence Needed (3) | 2025.07.21 |
[Baekjoon] 4466_A Smart Brain is a Tasty Brain (3) | 2025.07.18 |
[Baekjoon] 17585_Circuit Math (2) | 2025.07.17 |