Baekjoon #26597

Baekjoon #26597

1개의 풀이 · Java

문제 원문 보기 ↗

SOLUTION INFO

Java · Main.java

Main.java
import java.util.*;
import java.io.*;
import java.lang.*;

public class Main{
	public static void main(String[] args){
        FastReader rd = new FastReader();

        int Q = rd.nextInt();
        long minValue = -1_000_000_000_000_000_000L;
        long maxValue =  1_000_000_000_000_000_000L;

        int ans = Q + 1;
        for(int q = 1; q <= Q; ++q) {
            long x = rd.nextLong();
            String v = rd.next();

            if(v.equals("^")) {
                minValue = Math.max(minValue, x + 1);
            }
            else {
                maxValue = Math.min(maxValue, x - 1);
            }

            if(minValue > maxValue) {
                System.out.println("Paradox!");
                System.out.print(q);
                return;
            }
            else if(minValue == maxValue) ans = Math.min(ans, q);
        }

        if(minValue == maxValue) {
            System.out.println("I got it!");
            System.out.print(ans);
        }
        else {
            System.out.println("Hmm...");
        }
	}

    static class FastReader {
        BufferedReader br;
        StringTokenizer st;

        public FastReader() {
            br = new BufferedReader(new InputStreamReader(System.in));
        }

        String next() {
            while(st == null || !st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                }
                catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return st.nextToken();
        }

        int nextInt() { return Integer.parseInt(next()); }
        long nextLong() { return Long.parseLong(next()); }
        double nextDouble() { return Double.parseDouble(next()); }
        String nextLine() {
            String str = "";
            try {
                str = br.readLine();
            }
            catch (IOException e) {
                e.printStackTrace();
            }
            return str;
        }
    }
}

SOLUTION DESCRIPTION

풀이 설명

[minValue, maxValue] 구간을 잡고 주어지는 값을 보고 범위를 줄여나가면서 답은 찾아나가면 되는 문제. 쿼리 중간에 minValue > maxValue가 되는 순간이 있다 -> Paradox! minValue == maxValue => 답을 찾을 수 있음 (I got it!)