[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์™ธ๋ฒฝ ์ ๊ฒ€ / ํŒŒ์ด์ฌ
Problem Solving ๐Ÿ”ฅ/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ์™ธ๋ฒฝ ์ ๊ฒ€ / ํŒŒ์ด์ฌ

๋ฌธ์ œ

programmers.co.kr/learn/courses/30/lessons/60062

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์™ธ๋ฒฝ ์ ๊ฒ€

๋ ˆ์Šคํ† ๋ž‘์„ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ์Šค์นดํ”ผ๋Š” ๋ ˆ์Šคํ† ๋ž‘ ๋‚ด๋ถ€๊ฐ€ ๋„ˆ๋ฌด ๋‚ก์•„ ์นœ๊ตฌ๋“ค๊ณผ ํ•จ๊ป˜ ์ง์ ‘ ๋ฆฌ๋ชจ๋ธ๋ง ํ•˜๊ธฐ๋กœ ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ ˆ์Šคํ† ๋ž‘์ด ์žˆ๋Š” ๊ณณ์€ ์Šค๋…ธ์šฐํƒ€์šด์œผ๋กœ ๋งค์šฐ ์ถ”์šด ์ง€์—ญ์ด์–ด์„œ ๋‚ด๋ถ€ ๊ณต์‚ฌ๋ฅผ ํ•˜๋Š”

programmers.co.kr

ํ’€์ด

๊ฐœ์ธ์ ์œผ๋กœ ์–ด๋ ค์šด ๋ฌธ์ œ์˜€๋‹ค. ์ˆœ์—ด์„ ์ด์šฉํ•œ Brute Force ๋ฌธ์ œ์ด๋‹ค.
์นด์นด์˜ค ๋ฌธ์ œ๋Š” ์—ญ์‹œ ์–ด๋ ต๋‹ค.. ํ’€์ด ๋ฐฉ์‹์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
์šฐ์„  ์‹œ์ž‘์ ์„ ์ •ํ•ด์•ผํ•œ๋‹ค. ์›์ด๋ฏ€๋กœ ๋ฐฐ์—ด์—๋‹ค๊ฐ€ n์„ ๋”ํ•œ weak_point ๋ฐฐ์—ด์„ ์ƒˆ๋กญ๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.
๊ทธ ๋‹ค์Œ ์‹œ์ž‘์ ์—์„œ๋ถ€ํ„ฐ, ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ˆœ์—ด(dist์˜ ์กฐํ•ฉ)์„ permutations()๋ฅผ ํ†ตํ•ด ๊ณ„์‚ฐํ•˜๊ณ , ๋ชจ๋“  weak point๋ฅผ ์ปค๋ฒ„ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๋ฉฐ ์ตœ์†Œ๊ฐ’์„ ๊ฐฑ์‹ ํ•ด ๋‚˜๊ฐ„๋‹ค.

from itertools import permutations

def solution(n, weak, dist):
    INF = 987654321
    answer = INF
    weak_point = weak + [ w + n for w in weak ]
    L = len(weak) 
    # ์‹œ์ž‘์ 
    for (idx, start) in enumerate(weak):
        # ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ์ผ€์ด์Šค์˜ ์ˆœ์—ด
        for p in permutations(dist):
            count = 1
            pos = start
            for d in p:
                pos += d
                if pos >= weak_point[idx + L - 1]:
                    answer = min(answer, count)
                else:
                    pos = [w for w in weak_point if w > pos][0]
                    count += 1
    return -1 if answer == INF else answer