[Python - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level2 ] ์Šคํ‚ฌ ํŠธ๋ฆฌ

2021. 1. 3. 01:10ใ†๐Ÿ“š Algorithm/๐Ÿ’ช๐Ÿป Python ๋ฌธ์ œ ํ’€์ด

๋ฐ˜์‘ํ˜•

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - ์Šคํ‚ฌํŠธ๋ฆฌ

 

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

์„ ํ–‰ ์Šคํ‚ฌ์ด๋ž€ ์–ด๋–ค ์Šคํ‚ฌ์„ ๋ฐฐ์šฐ๊ธฐ ์ „์— ๋จผ์ € ๋ฐฐ์›Œ์•ผ ํ•˜๋Š” ์Šคํ‚ฌ์„ ๋œปํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ๊ฐ€ ์ŠคํŒŒํฌ → ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ฌ๋”์ผ๋•Œ, ์ฌ๋”๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•˜๊ณ , ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ๋ฅผ ๋ฐฐ์šฐ๋ ค๋ฉด ๋จผ์ € ์ŠคํŒŒํฌ๋ฅผ ๋ฐฐ์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์œ„ ์ˆœ์„œ์— ์—†๋Š” ๋‹ค๋ฅธ ์Šคํ‚ฌ(ํž๋ง ๋“ฑ)์€ ์ˆœ์„œ์— ์ƒ๊ด€์—†์ด ๋ฐฐ์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ŠคํŒŒํฌ → ํž๋ง → ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๊ฐ€๋Šฅํ•˜์ง€๋งŒ, ์ฌ๋” → ์ŠคํŒŒํฌ๋‚˜ ๋ผ์ดํŠธ๋‹ ๋ณผํŠธ → ์ŠคํŒŒํฌ → ํž๋ง → ์ฌ๋”์™€ ๊ฐ™์€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill๊ณผ ์œ ์ €๋“ค์ด ๋งŒ๋“  ์Šคํ‚ฌํŠธ๋ฆฌ1๋ฅผ ๋‹ด์€ ๋ฐฐ์—ด skill_trees๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ, ๊ฐ€๋Šฅํ•œ ์Šคํ‚ฌํŠธ๋ฆฌ ๊ฐœ์ˆ˜๋ฅผ return ํ•˜๋Š” solution ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ ์กฐ๊ฑด

  • ์Šคํ‚ฌ์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋ฉฐ, ๋ชจ๋“  ๋ฌธ์ž์—ด์€ ์•ŒํŒŒ๋ฒณ ๋Œ€๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ‚ฌ ์ˆœ์„œ์™€ ์Šคํ‚ฌํŠธ๋ฆฌ๋Š” ๋ฌธ์ž์—ด๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด, C → B → D ๋ผ๋ฉด CBD๋กœ ํ‘œ๊ธฐํ•ฉ๋‹ˆ๋‹ค
  • ์„ ํ–‰ ์Šคํ‚ฌ ์ˆœ์„œ skill์˜ ๊ธธ์ด๋Š” 1 ์ด์ƒ 26 ์ดํ•˜์ด๋ฉฐ, ์Šคํ‚ฌ์€ ์ค‘๋ณตํ•ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • skill_trees๋Š” ๊ธธ์ด 1 ์ด์ƒ 20 ์ดํ•˜์ธ ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค.
  • skill_trees์˜ ์›์†Œ๋Š” ์Šคํ‚ฌ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฌธ์ž์—ด์ž…๋‹ˆ๋‹ค.
    • skill_trees์˜ ์›์†Œ๋Š” ๊ธธ์ด๊ฐ€ 2 ์ด์ƒ 26 ์ดํ•˜์ธ ๋ฌธ์ž์—ด์ด๋ฉฐ, ์Šคํ‚ฌ์ด ์ค‘๋ณตํ•ด ์ฃผ์–ด์ง€์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

 

์ž…์ถœ๋ ฅ ์˜ˆ์‹œ

 

 

 

 

 

์„ ํ–‰์Šคํ‚ฌ์ด ํฌํ•จ๋˜๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๋Š” ๋กœ์ง์€ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์งœ๊ธฐ ์‰ฌ์› ์ง€๋งŒ, ์˜ˆ๋ฅผ ๋“ค์–ด C๊ฐ€ ๋‚˜์˜ค๊ธฐ์ „์— B๊ฐ€ ๋‚˜์˜ค๋Š” ๊ฒฝ์šฐ / CB ์ „ D๊ฐ€ ๋‚˜์˜จ ๊ฒฝ์šฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ณผ์ •์ด ์‰ฝ์ง€์•Š์•˜๋‹ค. correct๋ผ๋Š” index๋ฅผ 0์œผ๋กœ ๋‘์–ด ๊ตฌํ˜„ํ•˜์˜€๋”๋‹ˆ ์‰ฝ๊ฒŒ ํ’€ ์ˆ˜ ์žˆ์—ˆ๋‹ค.

skill_trees์˜ item์„ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•˜๋Š”๋ฐ ๋งŒ์•ฝ ์„ ํ–‰์Šคํ‚ฌ์— ํฌํ•จ๋˜๋Š” ๋ฌธ์ž๊ฐ€ ๋‚˜์˜ค๊ฒŒ ๋˜๋ฉด ์„ ํ–‰์Šคํ‚ฌ[correct]์™€ ๊ทธ ๋ฌธ์ž๊ฐ€ ๊ฐ™์€์ง€๋ฅผ ํ™•์ธํ•˜์˜€๋‹ค. 

๋งŒ์•ฝ ์„ ํ–‰์Šคํ‚ฌ์— ํฌํ•จ๋˜๋Š” ๋ฌธ์ž์ง€๋งŒ ์„ ํ–‰์Šคํ‚ฌ[correct] ์™€ ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด False๋ฅผ ๊ฐ™๋‹ค๋ฉด correct +1 ์„ ํ•ด์ฃผ์–ด skill_trees์˜ item์„ ๋ชจ๋‘ ๊ฒ€์‚ฌํ•˜๋„๋ก ๊ตฌํ˜„ํ–ˆ๋‹ค.

 

 

ํ’€์ด ๊ณผ์ •

def solution(skill, skill_trees):
    answer = 0
    skill_list = list(skill)
    for i in skill_trees:
        lists = list(reversed(list(i)))
        correct = 0
        flag = False
        while len(lists) >= 0:
            if len(lists) == 0:
                flag = True
                break
            item = lists.pop()
            if skill_list.__contains__(item):
                if skill_list[correct] == item:
                    correct += 1
                else:
                    flag = False
                    break
        if flag:
            answer += 1

    return answer
๋ฐ˜์‘ํ˜•