๐Ÿงฉ Algorithm/[Programmers] Level 2

[Programmers] L2. ์นดํŽซ (์™„์ „ํƒ์ƒ‰/Python)

devCloud 2024. 11. 11. 16:58
728x90

[๋ฌธ์ œ ๋งํฌ] ๐Ÿ‘‡

 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

SW๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ํ‰๊ฐ€, ๊ต์œก, ์ฑ„์šฉ๊นŒ์ง€ Total Solution์„ ์ œ๊ณตํ•˜๋Š” ๊ฐœ๋ฐœ์ž ์„ฑ์žฅ์„ ์œ„ํ•œ ๋ฒ ์ด์Šค์บ ํ”„

programmers.co.kr


ํ’€์ด ๋ฐฉ๋ฒ•

๐Ÿ’ก ์•ฝ์ˆ˜ ์Œ์œผ๋กœ ๋„ˆ๋น„์™€ ๋†’์ด ์ฐพ๊ธฐ

 

1๏ธโƒฃ ์ „์ฒด ๊ฒฉ์ž ์ˆ˜ ๊ณ„์‚ฐ

  • total = brown + yellow

2๏ธโƒฃ ์•ฝ์ˆ˜ ์Œ ์ฐพ๊ธฐ

  • total์˜ ์•ฝ์ˆ˜๋ฅผ ์ˆœํšŒํ•˜๋ฉด์„œ (width, height) ์Œ์„ ๊ตฌํ•œ๋‹ค.

3๏ธโƒฃ ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž ์กฐ๊ฑด ํ™•์ธ

  • ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž๋Š” ๊ฐˆ์ƒ‰ ํ…Œ๋‘๋ฆฌ ์•ˆ์— ์žˆ์–ด (width - 2) * (height - 2) == yellow๋ฅผ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

4๏ธโƒฃ ์ •๋‹ต ๋ฐ˜ํ™˜

  • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” (width, height) ์Œ์„ [width, height] ํ˜•ํƒœ๋กœ ๋ฐ˜ํ™˜ํ•œ๋‹ค.

Solution

def solution(brown, yellow):
    square = brown + yellow
    for i in range(1, int(square**0.5) + 1):
        if square % i == 0:
            width = square // i
            height = i
            if (width - 2) * (height - 2) == yellow:
                return [width, height]

 

๐Ÿ“Œ ์•ฝ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ์นดํŽซ์˜ ํฌ๊ธฐ ๊ตฌํ•˜๊ธฐ
    • ๊ฐˆ์ƒ‰๊ณผ ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ํ•ฉ์€ ์นดํŽซ ์ „์ฒด์˜ ๋„“์ด๊ฐ€ ๋˜๋ฏ€๋กœ, ์นดํŽซ์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ๊ธธ์ด๋Š” square์˜ ์•ฝ์ˆ˜ ์Œ์ด์–ด์•ผ ํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, square = width * height์™€ ๊ฐ™์ด ์ „์ฒด ๋„“์ด๋ฅผ ์ด๋ฃจ๋Š” ๋‘ ๊ฐ’์„ ์ฐพ๋Š” ๊ฒƒ์ด ๋ฌธ์ œ์˜ ํ•ต์‹ฌ์ธ๋ฐ, ์ด๋ฅผ ์œ„ํ•ด square์˜ ์•ฝ์ˆ˜๋ฅผ ์ฐพ์•„์„œ ๊ฐ€๋Šฅํ•œ (width, height) ์Œ์„ ๊ตฌํ•˜๋Š” ๊ฒƒ์ด ํšจ์œจ์ ์ด๋‹ค.
  • ์กฐ๊ฑด์— ๋งž๋Š” ๊ฐ€๋กœ์™€ ์„ธ๋กœ ์Œ ์ฐพ๊ธฐ
    • ๊ฐ€๋กœ์™€ ์„ธ๋กœ ๊ธธ์ด๊ฐ€ (width - 2) * (height - 2) == yellow ์กฐ๊ฑด์„ ๋งŒ์กฑํ•ด์•ผ ํ•˜๋ฏ€๋กœ, ์•ฝ์ˆ˜ ์Œ ์ค‘์—์„œ ์ด ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” (width, height)์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

์ด ๋ฐฉ๋ฒ•์„ ํ†ตํ•ด ํšจ์œจ์ ์œผ๋กœ ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ฐ€๋กœ์™€ ์„ธ๋กœ ๊ธธ์ด๋ฅผ ๊ตฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๐Ÿ“Œ (width - 2) * (height - 2) 

์ด ์กฐ๊ฑด์€ ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ๊ฐœ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ์ด๋‹ค. ์นดํŽซ์˜ ๊ฐ€์žฅ์ž๋ฆฌ๋Š” ๊ฐˆ์ƒ‰ ๊ฒฉ์ž๋กœ ๋‘˜๋Ÿฌ์‹ธ์—ฌ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ „์ฒด ๋„ˆ๋น„์™€ ๋†’์ด์—์„œ ์–‘์ชฝ ๊ฐ€์žฅ์ž๋ฆฌ ๊ฐ๊ฐ ํ•œ ์นธ์”ฉ์„ ์ œ์™ธํ•œ (width - 2)์™€ (height - 2) ๊ฐ€ ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž๊ฐ€ ๋ฐฐ์น˜๋œ ๊ณต๊ฐ„์˜ ๊ฐ€๋กœ์™€ ์„ธ๋กœ ๊ธธ์ด๊ฐ€ ๋œ๋‹ค. 


๐Ÿ‘ฉ‍๐Ÿ’ป ํšŒ๊ณ 

์ฒ˜์Œ์—” ๊ฐˆ์ƒ‰๊ณผ ๋…ธ๋ž€์ƒ‰์˜ ํ•ฉ์˜ ์•ฝ์ˆ˜ ์Œ์„ ๊ตฌํ•ด์„œ ๋งˆ์ง€๋ง‰ ๊ฐ’๋งŒ ๋ฐ˜ํ™˜ํ–ˆ์—ˆ๋‹ค. ์ด์œ ๋Š” ํ•ฉ์ด 12๋ผ๊ณ  ํ–ˆ์„ ๋•Œ 12์˜ ์•ฝ์ˆ˜ [1, 2, 3, 4, 6, 12] ์—์„œ ์ค‘๊ฐ„์— ํ•ด๋‹นํ•˜๋Š” [3, 4] ๊ฐ€ ์ •๋‹ต๊ณผ ์ผ์น˜ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ์ถœํ–ˆ์—ˆ๋‹ค. 

 

์˜ค๋‹ต

def solution(brown, yellow):
    answer = []
    square = brown + yellow
    for i in range(1, int(square**0.5) + 1):
        if square % i == 0 and i == int(square**0.5):
            answer.append(square // i)
            answer.append(i)
            
    return answer

 

๊ทธ๋Ÿฌ๋‚˜ ์ด ์ฝ”๋“œ๋Š” ์ •์‚ฌ๊ฐํ˜•์˜ ๊ฒฝ์šฐ์—๋งŒ ์ž‘๋™ํ•œ๋‹ค. i ๊ฐ€ ๊ฐ€๋กœ ๋˜๋Š” ์„ธ๋กœ ๊ธธ์ด๊ฐ€ ๋  ์ˆ˜ ์žˆ์–ด์„œ square % i == 0 ์กฐ๊ฑด๋งŒ์œผ๋กœ ์ถฉ๋ถ„ํ–ˆ๋‹ค. 


 

728x90