BOJ 14235 크리스마스 선물

1 minute read

  1. 변수

    int N // 아이들, 거점지 방문 횟수
    int A // 입력받는 거점지의 수, if(a==0)이면 아이들을 만나서 출력하는 코드 넣기
    PriorityQueue<Integer> present // * 우선순위 큐 사용!
    
  2. 구현 로직

    1. 우선순위 큐를 만든다

    2. 입력에 따라서 - 아이들을 만나(a==0) 출력

      ​ - 거점지를 만나(a!=0) 거점지의 수만큼 선물가치를 입력받기

  3. 코드

    package baekjoon.Silver;
       
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.util.Collections;
    import java.util.PriorityQueue;
    import java.util.StringTokenizer;
       
    public class BOJ_14235_크리스마스선물 {
    	public static void main(String[] args) throws Exception {
    		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    		int N = Integer.parseInt(br.readLine());
    		PriorityQueue<Integer> present = new PriorityQueue<Integer>(Collections.reverseOrder());
    		StringBuilder sb =new StringBuilder();
       		
    		for (int tc = 0; tc < N; tc++) {
    			StringTokenizer st = new StringTokenizer(br.readLine());
    			int A = Integer.parseInt(st.nextToken());
    			if (A == 0) { // 아이들을 만난 경우, 받은 선물의 가치 출력
    				if (present.isEmpty())
    					sb.append(-1).append('\n');
    				else {
    					sb.append(present.poll()).append('\n');
    				}
    			} else { // A는 거점지의 수
    				for (int a = 0; a < A; a++) {
    					int temp = Integer.parseInt(st.nextToken());
    					present.add(temp);
    				}
    			}
    		}
       		
    		System.out.println(sb.toString());
    	}
    }
       
    
  4. 배운점

    • 문제에서 주어지는 변수는 대문자로 표기, 내가 쓴 변수는 소문자

    • 우선순위 큐를 내림차순 정렬할 때

      PriorityQueue<Integer> pq = new PriorityQueue<Integer>(Collections.reversOrder());
      
      • Integer인 경우 Java에서 내부적으로 구현되어 있어!
    • StringBuilder에서 sb와 sb.toString()의 차이

      • string으로 활용하려고 하면 toString()을 해주고 그냥 출력만 하면 굳이 toString으로 string으로 바꿔줄 필요 X
      • StringBuilder와 String은 다른 타입

Leave a comment