๊ธฐ๋ก๋ฐฉ

BOJ_17626 : Four Squares ๋ณธ๋ฌธ

CodingTest/Python

BOJ_17626 : Four Squares

Soom_1n 2022. 9. 7. 18:23

 

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

17626๋ฒˆ: Four Squares

๋ผ๊ทธ๋ž‘์ฃผ๋Š” 1770๋…„์— ๋ชจ๋“  ์ž์—ฐ์ˆ˜๋Š” ๋„ท ํ˜น์€ ๊ทธ ์ดํ•˜์˜ ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ฆ๋ช…ํ•˜์˜€๋‹ค. ์–ด๋–ค ์ž์—ฐ์ˆ˜๋Š” ๋ณต์ˆ˜์˜ ๋ฐฉ๋ฒ•์œผ๋กœ ํ‘œํ˜„๋œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, 26์€ 52๊ณผ 12์˜ ํ•ฉ์ด๋‹ค; ๋˜ํ•œ 42 + 32 + 1

www.acmicpc.net



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ž…๋ ฅ๋ฐ›์€ n์„ ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์ตœ์†Œํ•œ์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ์ถœ๋ ฅํ•œ๋‹ค.
  • dp ์™€ ๋ธŒ๋ฃจํŠธ ํฌ์Šค ํ’€์ด ๋‘ ๊ฐ€์ง€๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    • dp
      • dp[n] ๋ฆฌ์ŠคํŠธ๋Š” n์„ ๋งŒ๋“œ๋Š”๋ฐ ๋“ค์–ด๊ฐ€๋Š” '์ œ๊ณฑ์ˆ˜ ํ•ฉ ๊ฒฝ์šฐ์˜ ์ˆ˜์˜ ์ตœ์†Œ๊ฐ’'์„ ์ €์žฅํ•œ๋‹ค.
      • dp[0] = 0, dp[1] = 1 ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค.
      • dp[n]์„ ๊ตฌํ•  ๋•Œ, 1๋ถ€ํ„ฐ j์˜ ์ œ๊ณฑ์ˆ˜(j**2)๊ฐ€ i๋ณด๋‹ค ์ปค์งˆ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•˜๋ฉฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
        • min_v : i์—์„œ j**2๋ฅผ ๋บ€ dp๊ฐ’( dp[i-j**2] )์˜ ์ตœ์†Œ๊ฐ’
        • dp[i]์— ๋ฐฉ๊ธˆ ๊ตฌํ•œ ์ตœ์†Œ๊ฐ’(min_v) + ๋บ๋˜ j**2(๊ฒฝ์šฐ์˜ ์ˆ˜ 1)๋ฅผ ์ €์žฅํ•œ๋‹ค. (dp[i] = min_v + 1)
        • ex) dp[5]๋ฅผ ๋งŒ๋“ค๋•Œ, dp[4]์˜ ๊ฐ’ (1) + j**2์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜(1) ํ•ด์„œ 2๋ฅผ ์ €์žฅ
          => 5๋ฅผ ๋งŒ๋“œ๋Š”๋ฐ ์ˆซ์ž 2๊ฐœ๋งŒ ์žˆ์œผ๋ฉด ๋œ๋‹ค. (4 + 1)
    • ๋ธŒ๋ฃจํŠธ ํฌ์Šค
      • ๋ฌธ์ œ ์กฐ๊ฑด์— ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ์„ 4์ดํ•˜์˜ ์ˆ˜๋กœ ๋‚˜ํƒ€๋‚ด๋ผ ํ–ˆ์œผ๋ฏ€๋กœ, ๋‹ต์€ 1,2,3,4 ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
        • n์˜ ์ œ๊ณฑ๊ทผ์ด ์ •์ˆ˜์ด๋ฉด(n์ด ์ œ๊ณฑ์ˆ˜) : 1
        • n - i**2์˜ ์ œ๊ณฑ๊ทผ์ด ์ •์ˆ˜์ด๋ฉด : 2                    => (n-i**2) + (i**2) ๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ (26์€ 25+1 ๋กœ ํ‘œํ˜„)
        • n - i**2 - j**2 ์˜ ์ œ๊ณฑ๊ทผ์ด ์ •์ˆ˜์ด๋ฉด : 3
        • ์ด ์™ธ์—” ๋ชจ๋‘ 4

๐Ÿ”ธ dp ํ’€์ด ์ฝ”๋“œ ๐Ÿ”ธ

n = int(input())
dp = [i for i in range(n+1)]

for i in range(2,n+1):
    j = 1
    min_v = 4
    while((j**2)<=i):
        dp_v = dp[i-(j**2)]
        min_v = min(min_v, dp_v)
        j+=1
    dp[i] = min_v+1    
print(dp[n])

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • pypy3 ์ œ์ถœ
  • dp๋ฆฌ์ŠคํŠธ๋Š” 0๋ถ€ํ„ฐ ์ธ๋ฑ์Šค n๊นŒ์ง€ 0~n์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•œ๋‹ค. (0, 1๋งŒ ๋„ฃ์–ด๋†”๋„ ๋จ)
  • 2๋ถ€ํ„ฐ n๊นŒ์ง€ dp๋ฆฌ์ŠคํŠธ๋ฅผ ์ฑ„์›Œ ๋‚˜๊ฐ„๋‹ค. 
    • min_v : ๋ฌธ์ œ ์กฐ๊ฑด์—์„œ ๋‹ต์ด 4์ดํ•˜์ด๋ฏ€๋กœ ์ตœ๋Œ€๊ฐ’ 4๋ฅผ ์ดˆ๊ธฐ๊ฐ’์œผ๋กœ ๋‘”๋‹ค
    • j๋Š” 1๋ถ€ํ„ฐ j**2์ด i ์ดํ•˜์ผ๋•Œ๊นŒ์ง€ dp๋ฆฌ์ŠคํŠธ๋ฅผ ๊ณ„์‚ฐํ•˜๋ฉฐ ์ตœ์†Œ๊ฐ’์„ ์ฐพ๋Š”๋‹ค.
    • dp[i]์— ์ตœ์†Œ๊ฐ’ + 1์„ ๋„ฃ๋Š”๋‹ค.

 

๐Ÿ”ธ ๋ธŒ๋ฃจํŠธ ํฌ์Šค  ํ’€์ด ์ฝ”๋“œ ๐Ÿ”ธ

def solution(n):
    if int(n**0.5) == n**0.5:
        return 1
    for i in range(1, int(n**0.5) + 1):
        if int((n - i**2)**0.5) == (n - i**2)**0.5:
            return 2
    for i in range(1, int(n**0.5) + 1):
        for j in range(1, int((n - i**2)**0.5) + 1):
            if int((n - i**2 - j**2)**0.5) == (n - i**2 - j**2)**0.5:
                return 3
    return 4


n = int(input())
print(solution(n))

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • python3 ์ œ์ถœ
  • ์ œ๊ณฑ๊ทผ (n**0.5)์ด ์ •์ˆ˜์ธ์ง€ ํ™•์ธํ•œ๋‹ค. (int()ํ•จ์ˆ˜์— ๋„ฃ์—ˆ์„๋•Œ์™€ ๊ฐ’ ๋น„๊ต)

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ƒ๋‹นํžˆ ์–ด๋ ค์› ๋˜ ๋ฌธ์ œ์˜€๋‹ค. dp ๊ทœ์น™์„ ์ฐพ๋Š”๊ฒƒ๋„ ์–ด๋ ค์› ๊ณ  ๋ธŒ๋ฃจํŠธํฌ์Šค ํƒœ๊ทธ๋„ ์žˆ์–ด์„œ ํ˜ผ๋ž€์Šค๋Ÿฌ์› ๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
  • dp๋Š” pypy3๋กœ ํ†ต๊ณผ๋˜์–ด์„œ python3๋กœ ํ†ต๊ณผํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ๋‹ค๊ฐ€ ๋ธŒ๋ฃจํŠธํฌ์Šค ํ’€์ด๋ฅผ ๋ณด๊ฒŒ๋˜์—ˆ๋‹ค.

728x90

'CodingTest > Python' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

BOJ_1037 : ์•ฝ์ˆ˜  (0) 2022.09.09
BOJ_4101 : ํฌ๋ƒ?  (0) 2022.09.09
BOJ_11727 : 2ร—n ํƒ€์ผ๋ง 2  (0) 2022.09.06
BOJ_11726 : 2ร—n ํƒ€์ผ๋ง  (0) 2022.09.05
BOJ_11659 : ๊ตฌ๊ฐ„ ํ•ฉ ๊ตฌํ•˜๊ธฐ 4  (0) 2022.09.05