Algorithm

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

lerrybe 2023. 3. 6. 14:02

2022 KAKAO BLIND RECRUITMENT - Lv2.

๐ŸŒต ๋ฌธ์ œ


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

 

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

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

programmers.co.kr

 

 

 

๐Ÿš€ ํ’€์ด


input์œผ๋กœ ๋“ค์–ด์˜ค๋Š” ์นœ๊ตฌ๋“ค์˜ ํฌ๊ธฐ๋ฅผ ๋ณด๊ณ  ๋ธŒ๋ฃจํŠธ ํฌ์Šค๋กœ ํƒ์ƒ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. 

๋ผ์ด์–ธ์ด ์  ์ˆ˜ ์žˆ๋Š” ํ™”์‚ด์˜ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋‹ด์€ ์ค‘๋ณต์กฐํ•ฉ์„ ๋ชจ๋‘ ๊ตฌํ•˜๊ณ , ์ด๋ฅผ ํ† ๋Œ€๋กœ ์–ดํ”ผ์น˜์˜ ํ™”์‚ด ๊ฒฝ์šฐ์˜ ์ˆ˜์™€ ๋Œ€์กฐํ•ด ๊ฐ๊ฐ์˜ ์ ์ˆ˜๋ฅผ ๊ตฌํ•ฉ๋‹ˆ๋‹ค. 

 

๊ฐ๊ฐ ์ ์ˆ˜๋ฅผ ๊ตฌํ•˜๊ณ  ์–ด์น˜ํ”ผ์™€ ๋ผ์ด์–ธ์˜ ์ ์ˆ˜๋ฅผ ๋น„๊ต, ๋” ํฐ ์ ์ˆ˜ ์ฐจ๊ฐ€ ๋‚  ๋•Œ๋งˆ๋‹ค ์ „์—ญ๋ณ€์ˆ˜ score_diff๋ฅผ ๊ฐฑ์‹ ํ•ด์ค๋‹ˆ๋‹ค. 

 

์ด ๋•Œ,

๋ผ์ด์–ธ์ด ๊ฐ€์žฅ ํฐ ์ ์ˆ˜ ์ฐจ์ด๋กœ ์šฐ์Šนํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ผ ๊ฒฝ์šฐ, ๊ฐ€์žฅ ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ๋” ๋งŽ์ด ๋งžํžŒ ๊ฒฝ์šฐ๋ฅผ return ํ•ด์ฃผ์„ธ์š”.

 

๋ผ๋Š” ์กฐ๊ฑด์ด ์žˆ์œผ๋ฏ€๋กœ, ์ฐจ์ด๊ฐ€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋Š” ๋‚ฎ์€ ์ ์ˆ˜๋ฅผ ๋งŽ์ด ๋งžํžŒ ๊ฒฝ์šฐ ๊ฐฑ์‹ ํ•ด์ค๋‹ˆ๋‹ค. 

result = max(result[::-1], lion_info[::-1])[::-1]  # ๋‘ ๋ฒˆ์งธ ์šฐ์„ ์ˆœ์œ„ ๊ณ ๋ คํ•ด ๊ฐฑ์‹ 

 

 


๐Ÿ’ก ํ’€์ด ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค. 

from itertools import combinations_with_replacement

def get_score(l_list, a_list):  # ๋‘ info ๋ฐฐ์—ด์„ ๋ณด๊ณ  ํ”Œ๋ ˆ์ด์–ด ๋‘ ๋ช…์˜ ์ ์ˆ˜๋ฅผ ๊ฐ๊ฐ ๊ตฌํ•˜๋Š” ๊ณผ์ •
    l_result, a_result = 0, 0
    for i in range(len(l_list)):
        if l_list[i] == 0 and a_list[i] == 0:
            continue
        if l_list[i] > a_list[i]:
            l_result += 10 - i
        elif a_list[i] >= l_list[i]:
            a_result += 10 - i
    return [l_result, a_result]

def get_info(cwr, length):  # ํ™”์‚ด ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ input ์œผ๋กœ ์ฃผ์–ด์ง„ 'info' ์™€ ๊ฐ™์€ ํ˜•์‹์œผ๋กœ ํ‘œํ˜„
    result = [0 for _ in range(length)]
    for i in cwr:
        result[i] += 1
    return result

def solution(n, info):
    result = [-1]
    score_diff = 0
    for cwr in combinations_with_replacement(range(11), n):
        lion_info = get_info(cwr, len(info))
        lion_score, apeach_score = get_score(lion_info, info)

        if lion_score <= apeach_score:  # ๋ผ์ด์–ธ (ํŒจ)์ธ ๊ฒฝ์šฐ
            continue
        curr_diff = lion_score - apeach_score  # ๋ผ์ด์–ธ (์Šน)์ธ ๊ฒฝ์šฐ ์ง„ํ–‰ํ•  ๋กœ์ง โฌ‡๏ธ
        if curr_diff > score_diff:
            result = lion_info
            score_diff = curr_diff
        elif curr_diff == score_diff:
            result = max(result[::-1], lion_info[::-1])[::-1]  # ๋‘ ๋ฒˆ์งธ ์šฐ์„ ์ˆœ์œ„
    return result

 

ํ›„์— ์ค‘๋ณต์กฐํ•ฉ ๋ถ€๋ถ„์€ ์—ฐ์Šต ์ฐจ ์‹ค์ œ๋กœ๋„ ๊ตฌํ˜„ ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.