๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์•Œ๊ณ ๋ฆฌ์ฆ˜

[Java] BOJ 7626 Four Squares

by ๐ŸŠ๊ทค๐ŸŠ 2024. 7. 31.

๋ฌธ์ œ 

๋ฌธ์ œ ๋งํฌ https://www.acmicpc.net/problem/17626

  • ๋ผ๊ทธ๋ž‘์ฃผ๋Š” 1770๋…„์— ๋ชจ๋“  ์ž์—ฐ์ˆ˜๋Š” ๋„ท ํ˜น์€ ๊ทธ ์ดํ•˜์˜ ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฆ๋ช…ํ•˜์˜€๋‹ค.
  • ์–ด๋–ค ์ž์—ฐ์ˆ˜๋Š” ๋ณต์ˆ˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค.
  • ์˜ˆ๋ฅผ ๋“ค๋ฉด, 26์€ 52๊ณผ 12์˜ ํ•ฉ์ด๋‹ค; ๋˜ํ•œ 42 + 32 + 12์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜๋„ ์žˆ๋‹ค.
  • ์—ญ์‚ฌ์ ์œผ๋กœ ์•”์‚ฐ์˜ ๋ช…์ˆ˜๋“ค์—๊ฒŒ ๊ณตํ†ต์ ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋กœ ์ž์—ฐ์ˆ˜๋ฅผ ๋„ท ํ˜น์€ ๊ทธ ์ดํ•˜์˜ ์ œ๊ณฑ์ˆ˜ ํ•ฉ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋ผ๋Š” ๊ฒƒ์ด์—ˆ๋‹ค.
  • 1900๋…„๋Œ€ ์ดˆ๋ฐ˜์— ํ•œ ์•”์‚ฐ๊ฐ€๊ฐ€ 15663 = 1252 + 62 + 12 + 12๋ผ๋Š” ํ•ด๋ฅผ ๊ตฌํ•˜๋Š”๋ฐ 8์ดˆ๊ฐ€ ๊ฑธ๋ ธ๋‹ค๋Š” ๋ณด๊ณ ๊ฐ€ ์žˆ๋‹ค.
  • ์ข€ ๋” ์–ด๋ ค์šด ๋ฌธ์ œ์— ๋Œ€ํ•ด์„œ๋Š” 56์ดˆ๊ฐ€ ๊ฑธ๋ ธ๋‹ค: 11339 = 1052 + 152 + 82 + 52.
  • ์ž์—ฐ์ˆ˜ n์ด ์ฃผ์–ด์งˆ ๋•Œ, n์„ ์ตœ์†Œ ๊ฐœ์ˆ˜์˜ ์ œ๊ณฑ์ˆ˜ ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.
  • ์ž…๋ ฅ์€ ํ‘œ์ค€์ž…๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ์ž…๋ ฅ์€ ์ž์—ฐ์ˆ˜ n์„ ํฌํ•จํ•˜๋Š” ํ•œ ์ค„๋กœ ๊ตฌ์„ฑ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ, 1 ≤ n ≤ 50,000์ด๋‹ค.
  • ์ถœ๋ ฅ์€ ํ‘œ์ค€์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•œ๋‹ค. ํ•ฉ์ด n๊ณผ ๊ฐ™๊ฒŒ ๋˜๋Š” ์ œ๊ณฑ์ˆ˜๋“ค์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ํ•œ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

์•„์ด๋””์–ด

  • n + 1 ํฌํ‚ค์˜ ๋ฐฐ์—ด์„ ์ œ๊ณฑ์ˆ˜์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์„ฑํ•œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ๋ฐฐ์—ด์˜ 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ดˆ๊ธฐ๊ฐ’์„ ๋ณธ์ธ์˜ ์ˆ˜๋กœ ์ €์žฅํ•œ๋‹ค. 
  • ์™œ๋ƒํ•˜๋ฉด ์ œ์ผ ํฐ ๊ฒฝ์šฐ์˜ ์ˆ˜๊ฐ€ 1์˜ ์ œ๊ณฑ์œผ๋กœ ํ•ฉ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ด์ค‘ for๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ i๋ฒˆ์งธ ๋ฐฐ์—ด์„ i๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ๊ฐ’๊ณผ i - j * j ๋ฒˆ์งธ ๋ฐฐ์—ด ๊ฐ’์— 1์„ ๋”ํ•œ ๊ฐ’๊ณผ ๋น„๊ตํ•ด์„œ ๋” ์ž‘์€ ๊ฐ’์„ ์ €์žฅํ•œ๋‹ค. 
  • ์ œ๊ณฑ์ˆ˜๊ฐ€ ๊ธฐ์กด ์ˆซ์ž๋ณด๋‹ค ํฌ๋ฉด ์•ˆ๋˜๋ฏ€๋กœ j์˜ ๋ฒ”์œ„๋Š”  j * j ๊ฐ€ i๋ณด๋‹ค ์ž‘์„ ๋•Œ๊นŒ์ง€๋กœ ์ œํ•œํ•œ๋‹ค.

๊ฒช์€ ์‹œํ–‰์ฐฉ์˜ค

  • ์ฒ˜์Œ์—๋Š” i๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ์ˆซ์ž๊ฐ€ ๊ทœ์น™์„ฑ์ด ์žˆ์„๊นŒ ์‹ถ์–ด์„œ ์—ด์‹ฌํžˆ ์ฐพ์•„๋ดค์ง€๋งŒ ์‹คํŒจํ•˜์˜€๊ณ ... ๋ฌธ์ œ๋ฅผ ๋ณด์ž๋งˆ์ž ๋– ์˜ฌ๋ ธ๋˜ '๋ฐฐ์—ด์˜ ์ด์ „ ๊ฐ’์— + 1์„ ํ•˜์—ฌ ํ’€๋ฉด๋˜์ง€ ์•Š์„๊นŒ'๋ž€ ์ƒ๊ฐ์„ ํ™œ์šฉํ•ด์„œ ํ’€์—ˆ๋‹ค 
  • ๊ทผ๋ž˜์— ํ’€์—ˆ๋˜ dp๋ฌธ์ œ ์ค‘์—์„œ ์ œ์ผ ์–ด๋ ต๊ฒŒ ํ’€์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค ใ…œใ…œ

ํž˜๋“  ์‹ธ์›€์ด์˜€๋‹ค...

์ฝ”๋“œ

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

public class BOJ17626 {
    public static void main(String[] args) throws Exception{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // ์ž…๋ ฅ๊ฐ’
        int n = Integer.parseInt(br.readLine());

        // ์ œ๊ณฑ๊ฐ’์˜ ๊ฐœ์ˆ˜๋ฅผ ์ €์žฅํ•  ๋ฐฐ์—ด
        int arr[] = new int[n + 1];

        // ๋ฐฐ์—ด์˜ i๋ฒˆ์งธ ๊ฐ’์„ i๊ฐ’์œผ๋กœ ์ €์žฅ
        // ์ตœ๋Œ€ ํ•„์š”ํ•œ ๊ฐœ์ˆ˜๋Š” 1์˜ ์ œ๊ณฑ์œผ๋กœ ๋‹ค ์ฑ„์šฐ๋Š” ๊ฒฝ์šฐ์ด๋ฏ€๋กœ
        for(int i = 1; i <= n; i++){
            arr[i] = i;
        }

        for(int i = 1; i <= n; i++){
            // ์ œ๊ณฑ์ˆ˜๊ฐ€ ๊ธฐ์กด๊ฐ’๋ณด๋‹ค ํฌ๋ฉด ์•ˆ๋˜๋ฏ€๋กœ
            // j * j ๊ฐ€ i๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์„๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต
            for(int j = 1; j * j <= i; j++){
                // i๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ๊ฐ’์„ i๋ฒˆ์งธ ๋ฐฐ์—ด์˜ ๊ฐ’๊ณผ
                // i๋ฒˆ์งธ ๋ฐฐ์—ด์—์„œ j์˜ ์ œ๊ณฑ๊ฐ’์„ ๋บ€ ๊ฐ’์—์„œ 1 ๋”ํ•œ๊ฐ’ ์ค‘
                // ๋” ์ž‘์€ ๊ฐ’์„ ์ €์žฅ
                arr[i] = Math.min(arr[i], arr[i - j * j] + 1);
            }
        }

        System.out.println(arr[n]);
    }
}