🌞Algorithm/🔥Baekjoon

[Baekjoon] 30949_Equal Schedules

뿌야._. 2025. 7. 22. 11:39
문제(출처: 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를 출력한다.