백준 19637번: IF문 좀 대신 써줘

Y·2023년 11월 12일
0

백준

목록 보기
12/27

백준 19637번: IF문 좀 대신 써줘

import java.util.*;
import java.io.*;

public class Main {
    static int N;
    static int M;
    static Criteria[] limitValues;
    public static class Criteria{
        String name;
        int value;
        public Criteria(String name, int value){
            this.name = name;
            this.value = value;
        }
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        StringTokenizer st = new StringTokenizer(br.readLine());

        N = Integer.parseInt(st.nextToken());
        M = Integer.parseInt(st.nextToken());
        limitValues = new Criteria[N];
        for(int i=0; i<N; i++){
            st = new StringTokenizer(br.readLine());
            String name = st.nextToken();
            int value = Integer.parseInt(st.nextToken());
            limitValues[i] = new Criteria(name, value);
        }

        for(int i=0; i<M; i++){
            int val = Integer.parseInt(br.readLine());
            bw.write(binarySearch(val));
            bw.newLine();
        }
        bw.flush();
    }

    public static String binarySearch(int value){
        int left = 0;
        int right = N-1;
        int ans = 0;
        while(left<=right){
            int mid = (left+right)/2;
            if(value<=limitValues[mid].value){
                ans = mid;
                right = mid-1;
            }
            else{
                left = mid+1;
            }
        }
        return limitValues[ans].name;

    }



}

정석 이분탐색 문제(?) 라고 할 수 있겠다. 시간 초과가 나서 혹시나해서 출력을 System.out.println()말고 bufferedwriter을 썼더니 시간은 괜찮아졌다. 그런데, 분명 코드에는 틀린 게 없는 것 같았는데 계속 틀렸다고 나왔다. 알고 보니 bufferedwriter을 써서 출력할때는 write()를 한 후에 flush()를 써서 출력해야했는데 flush()를 안 해줌 ㅋㅋ... 그래서 그 부분 고치고 정답 맞췄다. StringBuilder로 모아준 후에 System.out.println으로 출력해주는 방법도 있다!

profile
개발자, 학생

0개의 댓글