코딩테스트

BOJ : 20444

joonwoong 2024. 6. 6. 22:59

1. 문제

 

2. 문제 설명 및 알고리즘 설계

 

색종이를 가로나 세로로 잘라서 원하는 장수의 색종이가 나오는지 확인하는 문제이다.

 

가로나 세로 둘 중 하나를 기준으로 이분탐색을 통해 문제를 해결하면 된다.

 

(자른 횟수+1)*2를 해주면 색종이 장수가 나오는 것을 활용한다.

 

3. 코드

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
 
    public static void main(String[] args) throws Exception{
 
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
 
        StringTokenizer st = new StringTokenizer(br.readLine());
        long n = Long.parseLong(st.nextToken());
        long k = Long.parseLong(st.nextToken());
 
        String result = "NO";
        long s = 0, e = n / 2 + 1, m, tmp;
        while(s <= e) {
            m = (s + e) / 2;
 
            tmp = (m + 1) * (n - m + 1);
            if(tmp == k) {
                result = "YES";
                break;
            }
            else if (tmp > k) {
                e = m - 1;
            }
            else s = m + 1;
        }
 
        // 출력
        System.out.println(result);
    }
}

 

4. 시간복잡도

O(logN)

 

5. 결과

'코딩테스트' 카테고리의 다른 글

BOJ : 11728  (1) 2024.06.10
BOJ : 2018  (0) 2024.06.09
BOJ : 11687  (0) 2024.06.06
BOJ : 1654  (0) 2024.06.03
BOJ : 10815  (3) 2024.06.02