We will find a way, we always have.

-interstellar

Problem Solving/๋ฐฑ์ค€

[๋ฐฑ์ค€] 17626๋ฒˆ: Four Squares - ํŒŒ์ด์ฌ

Redddy 2022. 6. 20. 01:47

๐Ÿ”ˆ ๋ฌธ์ œ

๋ผ๊ทธ๋ž‘์ฃผ๋Š” 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๊ณผ ๊ฐ™๊ฒŒ ๋˜๋Š” ์ œ๊ณฑ์ˆ˜๋“ค์˜ ์ตœ์†Œ ๊ฐœ์ˆ˜๋ฅผ ํ•œ ์ค„์— ์ถœ๋ ฅํ•œ๋‹ค.

 

๐Ÿ“š ๋ฌธ์ œ ํ•ด์„

1 ๋ถ€ํ„ฐ 50000์ค‘ ์ˆ˜ ํ•˜๋‚˜๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ์ตœ์†Œํ•œ์˜ ์ œ๊ณฑ์ˆ˜์˜ ํ•ฉ์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์ด ์ตœ์†Œํ•œ์˜ ์ œ๊ณฑ์ˆ˜์˜ ๊ฐฏ์ˆ˜๋ฅผ ๊ตฌํ•˜๋Š” ์ตœ์ ํ™” ๋ฌธ์ œ์ด๋‹ค.

์‹œ๊ฐ„์ œํ•œ์ด 0.5์ดˆ๋กœ ๋นก๋นกํ•˜๋‹ค..(๊ทธ๋Ÿฐ๋ฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋ถ„๋ฅ˜๋Š” ๋ธŒ๋ฃจํŠธํฌ์Šค ๊ถ์‹œ๋ ๊ถ์‹œ๋ ,,)

 

์˜ˆ์ œ์ž…๋ ฅ์ธ 26์„ ์˜ˆ๋กœ ๋“ค๋ฉด 26์€ 1**2 + 5**2 ์ด๋ ‡๊ฒŒ ๋‘๊ฐœ์˜ ์ œ๊ณฑ์ˆ˜๋กœ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜์—ฌ 2๋ฅผ ์ถœ๋ ฅํ•˜๋ฉด ์ •๋‹ต ํŒ์ •์„ ๋ฐ›๋Š”๋‹ค.

 

dp[26] = min(dp[26-1**2], dp[26])

dp[26] = min(dp[26-2**2], dp[26])

dp[26] = min(dp[26-3**2], dp[26])

dp[26] = min(dp[26-4**2], dp[26])

dp[26] = min(dp[26-5**2], dp[26]) ๋ฅผ ๋ฐ˜๋ณตํ•˜์—ฌ ์ตœ์ ๊ฐ’์„ ์ฐพ์•„๋‚ธ๋‹ค.

 

๐Ÿ’ป ์ฝ”๋“œ

n = int(input())
dp = [i for i in range(n+1)] # dp ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
for i in range(1,n+1): # dp ํ…Œ์ด๋ธ” 1๋ถ€ํ„ฐ n๊นŒ์ง€ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐฑ์‹ 
    for j in range(1,int(i**0.5)+1): # 1๋ถ€ํ„ฐ i์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€
        if 0<=i-j**2: # i-j**2์ด dp ํ…Œ์ด๋ธ” ๋ฒ”์œ„ ๋‚ด๋ผ๋ฉด, ์ฆ‰ i-j**2์ด ์ž์—ฐ์ˆ˜๋ผ๋ฉด
            dp[i] = min(dp[i-j**2]+1,dp[i]) # i-j**2์—์„œ j**2๋ฅผ ๋”ํ•œ๊ฒƒ๊ณผ ํ˜„์žฌ dp[i]์™€ ๋น„๊ตํ›„ ๊ฐฑ์‹ 
print(dp[n])

 

 

๐Ÿญ ์‹œํ–‰์ฐฉ์˜ค

์‚ฌ์‹ค ๊ธ€์„ ์ •๋ฆฌํ•˜๋‹ค๊ฐ€ ์‹œ๊ฐ„์„ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•(for๋ฌธ์„ ์กฐ๊ธˆ ๋Œ๋ฆฌ๋Š” ๋ฐฉ๋ฒ•) ์ด ์ƒ๊ฐ๋‚˜์„œ ์ œ์ถœํ•˜๊ณ  ์™”๋Š”๋ฐ, ํŒŒ์ด์ฌ์€ ์—ฌ์ „ํžˆ ์‹œ๊ฐ„ ์ดˆ๊ณผใ…  ์˜€๊ณ , pypy๋Š” ๊ทธ๋ž˜๋„ ์‹œ๊ฐ„์ด ์กฐ๊ธˆ ๋นจ๋ผ์กŒ๋‹ค.

ํŒŒ์ด์ฌ์œผ๋กœ๋„ ์‹œ๊ฐ„์ดˆ๊ณผ ์•ˆ ๋ฐ›์œผ๋ ค๊ณ  ์‹œ๋„ํ•ด๋ณด์•˜์ง€๋งŒ ์‹คํŒจ^!^

 

๊ทธ๋ž˜๋„ dp ์ ํ™”์‹ ์ด์˜๊ฒŒ ์„ธ์›Œ์„œ ์ˆ์ฝ”๋”ฉ 39์œ„์— ๋žญํฌ๋˜์—ˆ๋‹ค..

๋ณ€๊ฒฝ์ „

for i in range(1,n+1):
    for j in range(1,int(n**0.5)+1):
        if 0<=i-j**2:
            dp[i] = min(dp[i-j**2]+1,dp[i])

 

๋ณ€๊ฒฝํ›„

for i in range(1,n+1):
    for j in range(1,int(i**0.5)+1):
        if 0<=i-j**2:
            dp[i] = min(dp[i-j**2]+1,dp[i])

๋‘๋ฒˆ์งธ for๋ฌธ์— n์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๊ฐ€ i์˜ ์ œ๊ณฑ๊ทผ๊นŒ์ง€๋กœ ๋ฐ”๋€Œ์—ˆ๋‹คใ…Ž

 

๐Ÿ”— ๋ฌธ์ œ๋งํฌ Four Squares