[99클럽 코테 스터디 27일차 TIL] 백준 11557 Yangjojang of The Year

말하는 감자·약 5시간 전
0
post-thumbnail

99클럽 코테 스터디 27일차 TIL

💙 JAVA 비기너

📌 오늘의 학습 키워드

  • 해쉬, 힙(우선순위 큐)

📌 공부한 내용

📍 오늘의 문제

📍 작성 코드

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Collections;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int T = Integer.parseInt(br.readLine());
		
		for(int i=0; i<T; i++) {
			int N = Integer.parseInt(br.readLine());
			
			PriorityQueue<Integer> bottles = new PriorityQueue<>(Collections.reverseOrder());
			HashMap<String, Integer> schools = new HashMap<>();
			
			for(int j=0; j<N; j++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				String school = st.nextToken();
				int bottle = Integer.parseInt(st.nextToken());
				
				bottles.add(bottle);
				schools.put(school, bottle);
			}
			
			int maxBottle = bottles.peek();
			
			for(String school : schools.keySet()) {
				if(schools.get(school) == maxBottle) {
					bw.write(school + "\n");
				}
			}
		}
		
		br.close();
		
		bw.flush();

        bw.close();
		
    }
}

📌 오늘의 회고

보자마자 아 이거 해시다! 어 근데 정렬...? 힙...??
에라이 그냥 다 써버려!!!!
하고 두개를 다 써버린 코드가 완성되었다.

학교명과 술의 양을 갖는 HashMap schools와 술의 양을 내림차순으로 정렬하는 Heap(PriorityQueue) bottles에 하나씩 다 넣어주고 bottles.peek()을 통해 가장 많은 술의 양 maxBottle을 찾아낸다. 그리고 schools에서 maxBottle을 값으로 가지고 있는 키값을 출력한다.

엥? 생각해보니 굳이 학교명을 키값으로 할 필요가 없잖아?!

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.Collections;
import java.util.HashMap;
import java.util.PriorityQueue;
import java.util.StringTokenizer;

public class Main {
	public static void main(String[] args) throws IOException {
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		int T = Integer.parseInt(br.readLine());
		
		for(int i=0; i<T; i++) {
			int N = Integer.parseInt(br.readLine());
			
			PriorityQueue<Integer> bottles = new PriorityQueue<>(Collections.reverseOrder());
			HashMap<Integer, String> schools = new HashMap<>();
			
			for(int j=0; j<N; j++) {
				StringTokenizer st = new StringTokenizer(br.readLine());
				String school = st.nextToken();
				int bottle = Integer.parseInt(st.nextToken());
				
				bottles.add(bottle);
				schools.put(bottle, school);
			}
			
			int maxBottle = bottles.peek();
			bw.write(schools.get(maxBottle) + "\n");
		}
		
		br.close();
		
		bw.flush();

        bw.close();
		
    }
}

키를 술의 양으로 값으로 학교명으로 변경해줬다.

시간은 비슷하지만 메모리와 코드 길이에 약간의 차이가 발생했다.

profile
나는 말하는 감자다

0개의 댓글