๐Ÿค–/ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค | Lv2] ์–‘๊ถ๋Œ€ํšŒ (Python) - 2022 KAKAO BLIND RECRUITMENT

sssbin 2023. 3. 2. 22:32

 

https://school.programmers.co.kr/learn/courses/30/lessons/92342

 

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

์ฝ”๋“œ ์ค‘์‹ฌ์˜ ๊ฐœ๋ฐœ์ž ์ฑ„์šฉ. ์Šคํƒ ๊ธฐ๋ฐ˜์˜ ํฌ์ง€์…˜ ๋งค์นญ. ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์˜ ๊ฐœ๋ฐœ์ž ๋งž์ถคํ˜• ํ”„๋กœํ•„์„ ๋“ฑ๋กํ•˜๊ณ , ๋‚˜์™€ ๊ธฐ์ˆ  ๊ถํ•ฉ์ด ์ž˜ ๋งž๋Š” ๊ธฐ์—…๋“ค์„ ๋งค์นญ ๋ฐ›์œผ์„ธ์š”.

programmers.co.kr

 

BFS๋ฅผ ์ด์šฉํ•˜์—ฌ ํ’€์—ˆ๋‹ค.

 

ํ™”์‚ด์„ ์  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ (๋‚จ์€ ํ™”์‚ด์ด ์กด์žฌ)

10์ ๋ถ€ํ„ฐ ์ฐจ๋ก€๋Œ€๋กœ ํ™”์‚ด์„ ์œ๋‹ค.

์  ์ˆ˜ ์žˆ๋Š” ํ™”์‚ด์€ ์–ดํ”ผ์น˜๋ณด๋‹ค 1๋ฐœ ๋” ์˜๊ธฐ or 0๋ฐœ ์˜๊ธฐ์ด๋‹ค.

deque์— ์  ์ˆ˜ ์žˆ๋Š” ํ™”์‚ด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ชจ๋‘ ๊ฐฑ์‹ ํ•˜์—ฌ ์ €์žฅํ•œ๋‹ค.

 

๋”์ด์ƒ ์  ํ™”์‚ด์ด ์—†๋Š” ๊ฒฝ์šฐ

10~1์ ๊นŒ์ง€ ๋ชจ๋“  ํ™”์‚ด์„ ๋‹ค ์ˆ๊ณ , ๋‚จ์€ ํ™”์‚ด์ด ์กด์žฌํ•  ๊ฒฝ์šฐ 0์ ์— ๋‚จ์€ ํ™”์‚ด์„ ๋ชฐ์•„์ค€๋‹ค.

๋ผ์ด์–ธ๊ณผ ์–ดํ”ผ์น˜์˜ ์ ์ˆ˜๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ๋‘˜์˜ ์ ์ˆ˜์ฐจ๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ์ •๋‹ต์„ ๊ฐฑ์‹ ํ•œ๋‹ค.

์ตœ๋Œ“๊ฐ’์ด ์—ฌ๋Ÿฌ๊ฐœ์ผ ๊ฒฝ์šฐ, answer์— ํ•ด๋‹น ๋ฆฌ์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค€๋‹ค.

 

answer์ด ๋นˆ ๊ฐ’์ด ์•„๋‹ ๊ฒฝ์šฐ

์›์†Œ๋ฅผ ๊ฑฐ๊พธ๋กœ ์ •๋ ฌํ•˜์—ฌ ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค. (๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ๋” ๋งžํžŒ ๋ฆฌ์ŠคํŠธ)

answer์ด ๋นˆ ๊ฐ’์ธ ๊ฒฝ์šฐ

[-1]์„ ๋ฆฌํ„ดํ•ด์ค€๋‹ค. (๋ผ์ด์–ธ์ด ์–ดํ”ผ์น˜๋ฅผ ์ด๊ธธ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค.)

 

# ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค 92342: ์–‘๊ถ๋Œ€ํšŒ (2022 KAKAO BLIND RECRUITMENT)

from collections import deque 

def solution(n, info):
    answer = []
    res = 1 # ๋น„๊ธฐ๋Š” ๊ฒฝ์šฐ ๊ณ ๋ คํ•˜์—ฌ 1๋กœ ์ดˆ๊ธฐํ™”
    queue = deque()
    queue.append([0, [0] * 11]) # [pos, score]
    
    while queue:
        pos, q = queue.pop()
        
        if sum(q) == n or (sum(q) < n and pos == 9): # 10~1์ ๊นŒ์ง€ ๋ชจ๋“  ํ™”์‚ด์„ ๋‹ค ์œ ๊ฒฝ์šฐ
            if (sum(q)) < n:
                q[10] = n - sum(q) # 0์ ์— ๋‚จ์€ ํ™”์‚ด ๋ชฐ์•„์ฃผ๊ธฐ

            ryan = 0
            apeach = 0
            for i in range(10): # ์ ์ˆ˜ ๊ณ„์‚ฐ (0์ ์€ ๊ณ„์‚ฐํ•  ํ•„์š” X)
                if q[i] > 0:
                    ryan += 10 - i
                elif info[i] > 0:
                    apeach += 10 - i

            if res < ryan-apeach: # ์ตœ๋Œ“๊ฐ’ ๊ฐฑ์‹ 
                answer = [q]
                res = ryan - apeach
            elif res == ryan-apeach:
                answer.append(q)

        elif sum(q) < n: # ๋‚จ์€ ํ™”์‚ด์ด ์กด์žฌํ•  ๊ฒฝ์šฐ
            q1 = q.copy()
            q2 = q.copy()
            
            q1[pos] = 0
            q2[pos] = info[pos] + 1
            pos += 1
            
            queue.append([pos, q1])
            queue.append([pos, q2])

    if answer:
        answer.sort(key = lambda x : x[::-1]) # ์›์†Œ๋ฅผ ๊ฑฐ๊พธ๋กœ ์ •๋ ฌ
        return answer[-1]
    
    return [-1]

 

ํ’€๊ธฐ ๋„ˆ๋ฌด ํž˜๋“  ๋ฌธ์ œ์˜€๋‹ค,,,, ๋ถ„๋ฐœํ•˜์ž ๐Ÿ™Œ๐Ÿฅฒ