🌞Algorithm/🔥Baekjoon

[Baekjoon] 31047_Warehouse

뿌야._. 2025. 1. 23. 14:52
문제(출처: https://www.acmicpc.net/problem/31047)

< Warehouse >

 

문제 풀이 

 

HashMap을 활용하여 장난감별 배송 수를 구한다. 배송 수 기준 내림차순, 장난감 이름 기준 오름차순으로 정렬하여 출력한다. 

 

 my solution (Java)

import java.io.BufferedReader;
import java.io.BufferedWriter;
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;
import java.io.IOException;

public class _31047_ { // Warehouse

	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 T = Integer.parseInt(bf.readLine());
        
		for (int i = 0; i < T; i++) {
			int N = Integer.parseInt(bf.readLine());
            
			HashMap<String, Integer> map = new HashMap<>();
			for (int j = 0; j < N; j++) {
				st = new StringTokenizer(bf.readLine());
                
				String name = st.nextToken();
				int m = Integer.parseInt(st.nextToken());
                
				if (map.containsKey(name)) {
					map.replace(name, map.get(name) + m);
				} else {
					map.put(name, m);
				}
			}
            
			ArrayList<String> list = new ArrayList<>(map.keySet());
			Collections.sort(list, new Comparator<String>() {
				@Override
				public int compare(String o1, String o2) {
					if (map.get(o1) == map.get(o2)) {
						return o1.compareTo(o2);
					}
					return map.get(o2) - map.get(o1);
				}
			});
            
			bw.write(list.size() + "\n");
			for (int j = 0; j < list.size(); j++) {
				bw.write(list.get(j) + " " + map.get(list.get(j)) + "\n");
			}
		}
		bw.flush();
	}
}
변수)
T : 테스트 케이스 수
N : 배송 수
map : HashMap <이름, 배송 수>
name, m : 장난감 이름, 배송 수
list : HashMap key -> ArrayList

 

테스트 케이스 수를 입력받아 테스트 케이스 수만큼 다음 과정을 반복한다.

 

1) N을 입력받는다.

2) N만큼 name과 m을 입력받는다.

3) HashMap에 key값으로 name이 있다면 value에 m을 더한다. name이 없다면 key값과 value를 추가한다.

4) HashMap의 key값을 ArrayList로 변환하여 value 기준 내림차순, value가 같다면 key 기준 오름차순으로 정렬한다.

5) ArrayList의 size를 출력하고 ArrayList의 값과 해당 값을 key값으로 가지는 map의 value를 출력한다.