728x90
https://www.acmicpc.net/problem/13414
메모리: 72,148 KB , 시간: 712 ms
사용 알고리즘: 자료 구조, 해시를 사용한 집합과 맵, 구현
728x90
수강신청을 한 순서대로 입력을 받으며
학번을 key
값으로 같은 학번이 나온 횟수를 value
로 Map
에 넣어준다.
다시 한번 수강신청을 한 순서대로 학번을 보며
map에서 학번에 해당하는 key
값을 가진 value
를 1씩 줄여준다.
만약 value
가 이미 1이라면, 해당 학번이 마지막으로 수강신청 버튼을 누른 것이므로
답으로 출력해준다.
import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.*; public class Main { public static void main(String[] args) throws Exception{ BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine()); int K = Integer.parseInt(st.nextToken()); int L = Integer.parseInt(st.nextToken()); // key := 학번 // value := key 학번이 몇 번 눌렀는지 Map<String, Integer> map = new HashMap<>(); // 대기열 순서 Queue<String> q = new LinkedList<>(); String id; for(int i = 0; i < L; i++) { id = br.readLine(); map.put(id, map.getOrDefault(id, 0) + 1); q.add(id); } StringBuilder result = new StringBuilder(); int count = 0; // 확정된 학생 수 while(!q.isEmpty()) { id = q.poll(); if(map.get(id) == 1) { result.append(id + "\n"); if(++count == K) break; } else { map.put(id, map.get(id) - 1); } } System.out.print(result); } }
728x90
'Problem Solving > BOJ' 카테고리의 다른 글
[백준, BOJ 10773] 제로 (java) (0) | 2024.08.30 |
---|---|
[백준, BOJ 2607] 비슷한 단어 (java) (0) | 2024.08.30 |
[백준, BOJ 14950] 정복자 (java) (0) | 2024.07.29 |
[백준, BOJ 9024] 두 수의 합 (java) (0) | 2024.07.26 |
[백준, BOJ 2058] 원자의 에너지 (java) (3) | 2024.07.25 |