🌞Algorithm/🔥Baekjoon

[Baekjoon] 8641_Sklep

뿌야._. 2025. 8. 15. 10:32
문제(출처: https://www.acmicpc.net/problem/8641)

< Sklep >

 

문제 풀이 

 

HashMap을 사용하여 그날 매장에 들어온 제품의 총수량을 구한다.

 

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.Comparator;
import java.util.HashMap;
import java.util.StringTokenizer;

public class _8641_ { // Sklep

	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;

		int n = Integer.parseInt(bf.readLine());

		HashMap<Integer, int[]> map = new HashMap<>();
		for (int i = 0; i < n; i++) {
			st = new StringTokenizer(bf.readLine());

			int a = Integer.parseInt(st.nextToken());
			int k = Integer.parseInt(st.nextToken());

			if (map.containsKey(a)) {
				map.get(a)[1] += k;
			} else {
				map.put(a, new int[] { i, k });
			}
		}

		ArrayList<Integer> list = new ArrayList<>(map.keySet());
		Collections.sort(list, new Comparator<Integer>() {
			@Override
			public int compare(Integer o1, Integer o2) {
				return map.get(o1)[0] - map.get(o2)[0];
			}
		});

		bw.write(list.size() + "\n");
		for (int i = 0; i < list.size(); i++) {
			bw.write(list.get(i) + " " + map.get(list.get(i))[1] + "\n");
		}
		bw.flush();
	}
}
변수)
n : 보고서 개수
map : HashMap <제품 번호, [입력 순서, 수량]>
a, k : 제품 번호, 수량
list : HashMap key -> ArrayList

 

보고서 개수를 입력받는다. 보고서 개수만큼 제품 번호와 수량을 입력받아 HashMap에 저장한다. HashMap의 key 값을 이용하여 ArrayList로 만든 뒤 입력 순서순으로 정렬한다. 

 

최종 ArrayList의 크기와 제품 번호, 수량을 출력한다.