본문 바로가기
Problem Solving/Baekjoon

[백준] 17393 다이나믹 롤러 - BinarySearch / Java

by graycode 2023. 6. 21.

 문제 링크

 

17393번: 다이나믹 롤러

페인팅 전문 회사 부키치 암즈는 거대한 페인팅용 롤러 "다이나믹 롤러"를 출시하였다. 이 신제품은 평범한 페인팅 롤러와 마찬가지로 굴려서 칠할 수 있지만, 손잡이를 세로로 휘둘러 잉크를

www.acmicpc.net

 

 풀이 과정

 

 풀이 코드

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

public class Main {

    static Pair[] arr;

    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 n = Integer.parseInt(br.readLine());

        StringTokenizer a = new StringTokenizer(br.readLine());
        StringTokenizer b = new StringTokenizer(br.readLine());

        arr = new Pair[n];
        for (int i = 0; i < n; i++)
            arr[i] = new Pair(Long.parseLong(a.nextToken()), Long.parseLong(b.nextToken()));

        StringBuilder sb = new StringBuilder();
        for (int i = 0; i < n; i++)
            sb.append(binarySearch(i)).append(" ");

        bw.write(sb.toString());
        bw.flush();
    }

    private static int binarySearch(int i) {
        int left = i, right = arr.length - 1;
        long tgt = arr[i].a;

        while (left <= right) {
            int mid = (left + right) / 2;

            if (arr[mid].b > tgt) right = mid - 1;
            else left = mid + 1;
        }

        return right - i;
    }

    private static class Pair {
        long a, b;

        public Pair(long a, long b) {
            this.a = a;
            this.b = b;
        }
    }

}

댓글