๐Ÿ ์ฝ”๋”ฉํ…Œ์ŠคํŠธ ๋Œ€๋น„ : PS

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์นดํŽซ (level2, python)

๊ฐœ๋ฐœ์ž HOON 2022. 9. 8. 18:07

๋ฌธ์ œ ์„ค๋ช…

 

Leo๋Š” ์นดํŽซ์„ ์‚ฌ๋Ÿฌ ๊ฐ”๋‹ค๊ฐ€ ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ค‘์•™์—๋Š” ๋…ธ๋ž€์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๊ณ  ํ…Œ๋‘๋ฆฌ 1์ค„์€ ๊ฐˆ์ƒ‰์œผ๋กœ ์น ํ•ด์ ธ ์žˆ๋Š” ๊ฒฉ์ž ๋ชจ์–‘ ์นดํŽซ์„ ๋ดค์Šต๋‹ˆ๋‹ค.

Leo๋Š” ์ง‘์œผ๋กœ ๋Œ์•„์™€์„œ ์•„๊นŒ ๋ณธ ์นดํŽซ์˜ ๋…ธ๋ž€์ƒ‰๊ณผ ๊ฐˆ์ƒ‰์œผ๋กœ ์ƒ‰์น ๋œ ๊ฒฉ์ž์˜ ๊ฐœ์ˆ˜๋Š” ๊ธฐ์–ตํ–ˆ์ง€๋งŒ, ์ „์ฒด ์นดํŽซ์˜ ํฌ๊ธฐ๋Š” ๊ธฐ์–ตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค.

 

Leo๊ฐ€ ๋ณธ ์นดํŽซ์—์„œ ๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown, ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์นดํŽซ์˜ ๊ฐ€๋กœ, ์„ธ๋กœ ํฌ๊ธฐ๋ฅผ ์ˆœ์„œ๋Œ€๋กœ ๋ฐฐ์—ด์— ๋‹ด์•„ return ํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


์ œํ•œ์‚ฌํ•ญ
  • ๊ฐˆ์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ brown์€ 8 ์ด์ƒ 5,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ๋…ธ๋ž€์ƒ‰ ๊ฒฉ์ž์˜ ์ˆ˜ yellow๋Š” 1 ์ด์ƒ 2,000,000 ์ดํ•˜์ธ ์ž์—ฐ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์นดํŽซ์˜ ๊ฐ€๋กœ ๊ธธ์ด๋Š” ์„ธ๋กœ ๊ธธ์ด์™€ ๊ฐ™๊ฑฐ๋‚˜, ์„ธ๋กœ ๊ธธ์ด๋ณด๋‹ค ๊น๋‹ˆ๋‹ค.

 


์ž…์ถœ๋ ฅ ์˜ˆ
brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

 

ํ’€์ด ์ฝ”๋“œ

def get_candidate(tile):
    max_val = tile+1
    result = [] # [๊ฐ€๋กœ, ์„ธ๋กœ] ํ›„๋ณด๊ตฐ
    for i in range(1, tile+1):
        if i > max_val:
            # ์ด๋ฏธ ํ›„๋ณด๊ตฐ์— ๋“ค์–ด๊ฐ„ ์Œ์ด๋ผ๋ฉด ๋” ํ›„๋ณด๊ตฐ์— ๋„ฃ์„ ํ•„์š” ์—†์œผ๋ฏ€๋กœ ๋ฆฌํ„ด.
            # ์˜ˆ๋ฅผ ๋“ค์–ด, (a,b)๊ฐ€ ํ›„๋ณด๊ตฐ์— ๋“ค์–ด์™”๋Š”๋ฐ (b,a)๊ฐ€ ๋“ค์–ด์˜ค๋ ค๊ณ  ํ•œ๋‹ค๋ฉด ๋“ค์–ด์˜ฌ ํ•„์š” ์—†์Œ.
            return result
        if tile % i == 0:
            # i๊ฐ€ tile ๊ฐ’์˜ ์•ฝ์ˆ˜๋ผ๋ฉด
            pair = tile // i
            result.append([i, pair])
            max_val = pair
    return result
            
def solution(brown, yellow):
    tile = brown + yellow
    answer = []
    for can in get_candidate(tile):
        a, b = can
        # ํƒ€์ผ ํ…Œ๋‘๋ฆฌ ๊ตฌํ•˜๋Š” ์‹.
        # ๊ฐ€๋กœ * 2 + ์„ธ๋กœ * 2 ํ•˜๋ฉด, ๊ฐ ๊ผญ์ง€์ ์ด 2๋ฒˆ์”ฉ ๊ณ„์‚ฐ๋˜์—ˆ์œผ๋ฏ€๋กœ 4๋ฅผ ๋นผ์ฃผ๋ฉด ๋จ.
        tmp_brown = a*2 + b*2 - 4
        if tmp_brown == brown:
            # [a, b]์—์„œ ๊ฐ€๋กœ๊ฐ€ ๋” ๊ธธ๋‹ค๊ณ  ๋ฌธ์ œ์—์„œ ์ฃผ์–ด์กŒ์œผ๋ฏ€๋กœ
            # [b, a]๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด ์˜ณ์Œ.
            answer.append(b)
            answer.append(a)
            break
    return answer

 

์กฐ๊ธˆ ๋Œ์•„๊ฐ„ ๋А๋‚Œ์€ ์žˆ์ง€๋งŒ, ์ •์ƒ์ ์œผ๋กœ ํ†ต๊ณผ๋˜๋Š” ์ฝ”๋“œ์ด๋‹ค.

๋ฌธ์ œ ์ž์ฒด๋Š” brute force(์™„์ „ ํƒ์ƒ‰)๊ณผ ์กฐ๊ธˆ์˜ ์ˆ˜ํ•™์ด๋‹ค.

์ฝ”๋“œ ์„ค๋ช…์„ ํ•˜์ž๋ฉด, get_candidate๋Š” ํƒ€์ผ์˜ ์ด ๊ฐœ์ˆ˜๋ฅผ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„, [๊ฐ€๋กœ, ์„ธ๋กœ]๊ฐ€ ๋  ์ˆ˜ ์žˆ๋Š” ํ›„๋ณด๊ตฐ์„ ๋ฆฌํ„ด ๋ฐ›๋Š” ํ•จ์ˆ˜์ด๋‹ค.

์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ฃผ์„์œผ๋กœ ๊ธฐ์žฌํ–ˆ์œผ๋‹ˆ ์ฐธ๊ณ .

 

ํ•ด๋‹น ํ›„๋ณด๊ตฐ์—์„œ ํ…Œ๋‘๋ฆฌ(brown)์˜ ๊ฐœ์ˆ˜๋ฅผ ๋งŒ์กฑํ•˜๋Š” ํ›„๋ณด๋ฅผ ์ฐพ์•„ ๋ฆฌํ„ดํ•˜๋ฉด ๋œ๋‹ค.

์ง์‚ฌ๊ฐํ˜•์˜ ๋ณ€์˜ ๊ธธ์ด์˜ ์ด ํ•ฉ์€ ๊ฐ€๋กœ * 2 + ์„ธ๋กœ * 2์ด๋‹ค.

์—ฌ๊ธฐ์„œ๋Š” ํƒ€์ผ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋”ฐ์ ธ์•ผ ํ•˜๋ฏ€๋กœ, ๊ฐ€๋กœ * 2 + ์„ธ๋กœ * 2๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ๊ผญ์ง€์  4๊ฐœ๊ฐ€ ๋‘ ๋ฒˆ์”ฉ ๊ณ„์‚ฐ๋œ๋‹ค.

์ด๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋ฉด ๋œ๋‹ค.