Algorithm/BOJ

[Boj_20444] ์ƒ‰์ข…์ด์™€ ๊ฐ€์œ„

jeong_ii 2025. 1. 20. 22:28

๐Ÿ“Ž ๋ฌธ์ œ ๋งํฌ

https://www.acmicpc.net/problem/20444

 

โ–ธ ๋ฌธ์ œ

์˜ค๋Š˜๋„ ์—ญ์‹œ ์ค€์„ฑ์ด๋Š” ์–ด๊น€์—†์ด ์ƒ‰์ข…์ด์™€ ์ฟผ๋ฆฌ๋ฅผ ํ‘ธ๋Š” ๋ฐ ์‹คํŒจํ•˜์˜€๋‹ค!!

์ƒ‰์ข…์ด์— ์—ด๋“ฑ๊ฐ์„ ๋А๋‚€ ์ค€์„ฑ์ด๋Š” ๊ฐ€์œ„๋กœ ๋ˆˆ์— ๋ณด์ด๋Š” ์ƒ‰์ข…์ด๋ฅผ ๋ชจ๋‘ ์ž˜๋ผ ๋ฒ„๋ฆฌ๋ ค๊ณ  ํ•œ๋‹ค!!

์ƒ‰์ข…์ด๋ฅผ ์ž๋ฅผ ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทœ์น™์„ ๋”ฐ๋ฅธ๋‹ค.

  1. ์ƒ‰์ข…์ด๋Š” ์ง์‚ฌ๊ฐํ˜•์ด๋ฉฐ, ์ƒ‰์ข…์ด๋ฅผ ์ž๋ฅผ ๋•Œ๋Š” ํ•œ ๋ณ€์— ํ‰ํ–‰ํ•˜๊ฒŒ ์ž๋ฅธ๋‹ค.
  2. ์ž๋ฅด๊ธฐ ์‹œ์ž‘ํ–ˆ์œผ๋ฉด, ๊ฒฝ๋กœ ์ƒ์˜ ๋ชจ๋“  ์ƒ‰์ข…์ด๋ฅผ ์ž๋ฅผ ๋•Œ๊นŒ์ง€ ๋ฉˆ์ถ”์ง€ ์•Š๋Š”๋‹ค.
  3. ์ด๋ฏธ ์ž๋ฅธ ๊ณณ์„ ๋˜ ์ž๋ฅผ ์ˆ˜ ์—†๋‹ค.

๋ถ„๋…ธ์— ์ฐฌ ๊ฐ€์œ„์งˆ์„ ํ•˜๋˜ ์ค€์„ฑ์ด๋Š” ๊ฐ‘์ž๊ธฐ ํ•˜๋‚˜์˜ ์ƒ‰์ข…์ด๋ฅผ ์ •ํ™•ํžˆ n๋ฒˆ์˜ ๊ฐ€์œ„์งˆ๋กœ k๊ฐœ์˜ ์ƒ‰์ข…์ด ์กฐ๊ฐ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€ ๊ถ๊ธˆํ•ด์กŒ๋‹ค.
๊ถ๊ธˆํ•˜์ง€๋งŒ ํ™”๊ฐ€ ๋‚˜์„œ ์ฝ”๋”ฉ์— ์ง‘์ค‘ํ•  ์ˆ˜ ์—†๋Š” ์ค€์„ฑ์ด ๋Œ€์‹  ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋„๋ก ํ•˜์ž.

 

โ–ธ ์ž…๋ ฅ

์ฒซ ์ค„์— ์ •์ˆ˜ nk๊ฐ€ ์ฃผ์–ด์ง„๋‹ค. (1 ≤ ≤ 231-1, 1 ≤ ≤ 263-1)

 

โ–ธ ์ถœ๋ ฅ

์ฒซ ์ค„์— ์ •ํ™•ํžˆ n๋ฒˆ์˜ ๊ฐ€์œ„์งˆ๋กœ k๊ฐœ์˜ ์ƒ‰์ข…์ด ์กฐ๊ฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๋ฉด YES, ์•„๋‹ˆ๋ผ๋ฉด NO๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“ ๋ฌธ์ œ ์ •๋ณด

  • ๐Ÿฅ‡ ๋ฌธ์ œ ๋ ˆ๋ฒจ : ๊ณจ๋“œ 5
  • ๐Ÿ””  ๋ฌธ์ œ ์œ ํ˜• : ์ˆ˜ํ•™, ์ด๋ถ„ ํƒ์ƒ‰
  • ๐Ÿ’ฌ  ํ’€์ด ์–ธ์–ด : JAVA

 

๐Ÿค” ๋ฌธ์ œ ํ’€์ด

์ด๋ถ„ ํƒ์ƒ‰์œผ๋กœ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ์˜€๋‹ค.

 

๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ƒ‰์ข…์ด๋ฅผ ์ž๋ฅธ๋‹ค๊ณ  ํ•  ๋•Œ, ๊ทธ ์ž๋ฅด๋Š” ํšŸ์ˆ˜์— ๋”ฐ๋ผ ์ƒ‰์ข…์ด์˜ ์กฐ๊ฐ ์ˆ˜๊ฐ€ ๊ฒฐ์ •๋œ๋‹ค.

 

์ž๋ฅด๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’์€ 0, ์ตœ๋Œ“๊ฐ’์€ N/2๋กœ ์„ค์ •ํ•œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ€๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜์™€ ์„ธ๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜๊ฐ€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค๊ณ  ํ•ด๋ณด์ž.

๊ฐ€๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜ ์„ธ๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜
0 N
N 0
N/2 N/2

์ฆ‰, ๊ฐ€๋กœ์™€ ์„ธ๋กœ๋Š” ๋Œ€์นญ์„ ์ด๋ฃจ๋ฏ€๋กœ N/2๊นŒ์ง€๋งŒ ํƒ์ƒ‰ํ•˜๋ฉด ๋œ๋‹ค.

 

๋‚˜์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ€๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜๋ฅผ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ–ˆ๋‹ค.

์ด๋•Œ, ์„ธ๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜๋„ ๊ฐ™์ด ๊ตฌํ•˜์—ฌ ๊ฐ๊ฐ์˜ ํšŸ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์ž˜๋ฆฌ๋Š” ์ƒ‰์ข…์ด์˜ ์ด๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•ด ์ฃผ์—ˆ๋‹ค.

์ž˜๋ฆฌ๋Š” ์ƒ‰์ข…์ด์˜ ์ด ๊ฐœ์ˆ˜ : (๊ฐ€๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜+1)*(์„ธ๋กœ๋กœ ์ž๋ฅธ ํšŸ์ˆ˜+1)

 

์ƒ‰์ข…์ด์˜ ์ด๊ฐœ์ˆ˜ total์ด k์™€ ๊ฐ™๋‹ค๋ฉด, n ๋ฒˆ์˜ ๊ฐ€์œ„์งˆ๋กœ k ๊ฐœ์˜ ์ƒ‰์ข…์ด ์กฐ๊ฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ YES ์ถœ๋ ฅํ•˜๊ณ  ํƒ์ƒ‰์„ ์ข…๋ฃŒํ•œ๋‹ค.

total > k๋ผ๋ฉด, ์ƒ‰์ข…์ด ์กฐ๊ฐ์ด ๋„˜์น˜๋ฏ€๋กœ ๋” ํฌ๊ฒŒ ์ž˜๋ผ ๊ฐœ์ˆ˜๋ฅผ ์ค„์—ฌ์ค€๋‹ค. ์ฆ‰, row ๊ฐ’์„ ์ค„์ธ๋‹ค.

total < k๋ผ๋ฉด, ์ƒ‰์ข…์ด ์กฐ๊ฐ์ด ๋ถ€์กฑํ•˜๋ฏ€๋กœ ๋” ์ž‘๊ฒŒ ์ž˜๋ผ ๊ฐœ์ˆ˜๋ฅผ ๋Š˜๋ ค์ค€๋‹ค. ์ฆ‰, row ๊ฐ’์„ ๋Š˜๋ฆฐ๋‹ค.

 

ํƒ์ƒ‰์ด ๋๋‚  ๋•Œ๊นŒ์ง€ total๊ณผ k๊ฐ€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด NO๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค. ์ฆ‰, n ๋ฒˆ์˜ ๊ฐ€์œ„์งˆ๋กœ k ๊ฐœ์˜ ์ƒ‰์ข…์ด ์กฐ๊ฐ์„ ๋งŒ๋“ค ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

 

์œ„ ํ’€์ด๋ฅผ ์ฝ”๋“œ๋กœ ์ž‘์„ฑํ•ด ๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

 

โœ” ์ตœ์ข… ์ฝ”๋“œ

๋ฉ”๋ชจ๋ฆฌ : 11532KB
์‹œ๊ฐ„ : 72ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine());
        // n๋ฒˆ์˜ ๊ฐ€์œ„์งˆ๋กœ k๊ฐœ์˜ ์ƒ‰์ข…์ด ์กฐ๊ฐ์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š”์ง€
        long n = Long.parseLong(st.nextToken());
        long k = Long.parseLong(st.nextToken());
        
        long start = 0; // ์ž๋ฅด๋Š” ํšŸ์ˆ˜์˜ ์ตœ์†Ÿ๊ฐ’
        long end = n/2; // ์ตœ๋Œ“๊ฐ’
        while (start <= end) {
            // ๊ฐ€๋กœ๋กœ ๋ช‡ ๋ฒˆ ์ž˜๋ž๋Š”์ง€๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋‘”๋‹ค.
            long row = start + (end - start) / 2;
            long col = n-row;

            // ์ž๋ฅธ ์ƒ‰์ข…์ด ์กฐ๊ฐ์˜ ์ด ๊ฐœ์ˆ˜
            long total = getTotal(row, col);
            if (total == k) { // ์กฐ๊ฑด ๋งŒ์กฑ
                System.out.println("YES");
                return;
            } else if (total > k) { // ์ƒ‰์ข…์ด ์กฐ๊ฐ ๋„˜์นจ, ๋” ํฌ๊ฒŒ ์ž˜๋ผ์•ผ ํ•จ
                end = row-1;
            } else { // ์ƒ‰์ข…์ด ์กฐ๊ฐ ๋ถ€์กฑ, ๋” ์ž‘๊ฒŒ ์ž˜๋ผ์•ผ ํ•จ
                start = row+1;
            }
        }

        System.out.println("NO");
    }

    private static long getTotal(long row, long col) {
        return (row+1)*(col+1);
    }
}

 

๋ฌธ์ œ๋ฅผ ์ฝ๊ณ  ์ด๋ถ„ ํƒ์ƒ‰์„ ๋– ์˜ฌ๋ฆฌ๋Š” ๊ฒŒ ์‰ฝ์ง€ ์•Š๋‹ค. ๋˜ ์–ด๋–ค ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•ด์•ผ ํ• ์ง€ ์ฐพ๋Š” ๊ฒƒ๋„ ์–ด๋ ต๋‹ค. ๐Ÿ˜ญ

์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง„ ๊ฐ’์˜ ๋ฒ”์œ„๊ฐ€ ํฌ๊ณ  ์‹œ๊ฐ„์ œํ•œ์ด ์ž‘๋‹ค๋ฉด ์ด์ง„ ํƒ์ƒ‰ ๋จผ์ € ๋– ์˜ฌ๋ ค์•ผ๊ฒ ๋‹ค !

 

์–ด์ฐŒ์ €์ฐŒ ํ•ด๊ฒฐ ์™„๋ฃŒ ! ๐Ÿ”ฅ