๊ธฐ๋ก๋ฐฉ

Lv.2 : ์Šคํ‚ฌํŠธ๋ฆฌ ๋ณธ๋ฌธ

CodingTest/Python

Lv.2 : ์Šคํ‚ฌํŠธ๋ฆฌ

Soom_1n 2022. 9. 18. 16:48

๐Ÿ‘‰ ๋ฌธ์ œ๋งํฌ

 

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

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

programmers.co.kr



๐Ÿ”ธ ๋ฌธ์ œ ๋ถ„์„ ๐Ÿ”ธ

  • ์ •๋‹ต ์Šคํ‚ฌํŠธ๋ฆฌ์™€ ์œ ์ €๋“ค์˜ ์Šคํ‚ฌ ํŠธ๋ฆฌ๊ฐ€ ์ž…๋ ฅ๋œ๋‹ค.
  • ์ •๋‹ต ์Šคํ‚ฌํŠธ๋ฆฌ์™€ ๋น„๊ตํ•ด์„œ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฐ์„ ์ˆ˜ ์žˆ๋Š” ์œ ์ €๋“ค์˜ ์Šคํ‚ฌ ํŠธ๋ฆฌ ์ˆ˜๋ฅผ ๋ฆฌํ„ดํ•œ๋‹ค.

๐Ÿ”ธ ์ฝ”๋“œ ๐Ÿ”ธ

def solution(skill, skill_trees):
    answer = 0
    
    for st in skill_trees:
        sk_list = list(skill)[::-1]
        
        for c in st:
            if c in skill:
                if sk_list.pop() != c:
                    break
        else:
            answer += 1

    return answer

๐Ÿ”ธ ์ฝ”๋“œ ํ•ด์„ ๐Ÿ”ธ

  • ์œ ์ €๋“ค์˜ ์Šคํ‚ฌ ํŠธ๋ฆฌ๋ฅผ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ํ•˜๋‚˜์”ฉ ๊ฒ€์‚ฌํ•œ๋‹ค.
    • sk_list : ์ •๋‹ต ์Šคํ‚ฌ ํŠธ๋ฆฌ๋ฅผ ๋ฆฌ์ŠคํŠธ๋กœ ๋งŒ๋“ค์–ด ๋’ค์ง‘์–ด ์ €์žฅํ•ด๋‘”๋‹ค.
    • ์œ ์ € ์Šคํ‚ฌ์„ ํ•œ ๊ธ€์ž์”ฉ ๊ฒ€์‚ฌํ•œ๋‹ค.
      • ๋งŒ์•ฝ ์ •๋‹ต ์Šคํ‚ฌํŠธ๋ฆฌ์•ˆ์— ์žˆ๋Š” ๊ธ€์ž๋ผ๋ฉด, ์ •๋‹ต ์Šคํ‚ฌํŠธ๋ฆฌ ๋ฆฌ์ŠคํŠธ์—์„œ ์›์†Œ๋ฅผ ํ•˜๋‚˜ ๊บผ๋‚ด ๋น„๊ตํ•œ๋‹ค.
      • ๊ฐ™์ง€ ์•Š๋‹ค๋ฉด ์ˆœ์„œ๊ฐ€ ํ‹€๋ ธ๋‹ค๋Š” ์˜๋ฏธ๊ฐ€ ๋œ๋‹ค.
    • for - else๋ฌธ์œผ๋กœ, break์—†์ด ๋๊นŒ์ง€ for๋ฌธ์ด ๋ฐ˜๋ณต๋๋‹ค๋ฉด else๋ฌธ์„ ์‹คํ–‰ํ•ด answer์„ +1 ํ•œ๋‹ค.

 ๐Ÿ”ธ ๋‹ค๋ฅธ ํ’€์ด ๐Ÿ”ธ

import re

def solution(skill, skill_trees):
    sum(skill.startswith(re.sub('[^' + skill + ']', '', st)) for st in skill_trees)

 

  • ์ •๋‹ต ์Šคํ‚ฌํŠธ๋ฆฌ์˜ ๋ฌธ์ž๋ฅผ ์ •๊ทœํ‘œํ˜„์‹์œผ๋กœ ๊ฒ€์ƒ‰ํ•œ๋‹ค.
    • re.sub(์ •๊ทœํ‘œํ˜„์‹, ์น˜ํ™˜๋ฌธ์ž, ๋Œ€์ƒ๋ฌธ์ž์—ด)
    • ์ •๊ทœ ํ‘œํ˜„์‹ : ๊ฒ€์ƒ‰ ํŒจํ„ด์„ ์ง€์ •
      • '[๋ฌธ์ž์—ด]' : ๋ฌธ์ž์—ด์„ ๊ฒ€์ƒ‰
      • '[^๋ฌธ์ž์—ด]' : ๋ฌธ์ž์—ด์„ ์ œ์™ธํ•˜๊ณ  ๊ฒ€์ƒ‰
    • ์น˜ํ™˜ ๋ฌธ์ž : ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์€ ๋ฌธ์ž (์ง€์ • ์•ˆํ•˜๋ฉด ์ œ๊ฑฐ)
    • ๋Œ€์ƒ ๋ฌธ์ž์—ด : ๊ฒ€์ƒ‰ ๋Œ€์ƒ์ด ๋˜๋Š” ๋ฌธ์ž์—ด
    • ๋”ฐ๋ผ์„œ skill์„ ์ œ์™ธํ•œ ๋ฌธ์ž๋“ค์„ ์—†์•ค๋‹ค.
  • str.startswith(S) ํ•จ์ˆ˜๋กœ ๋ฌธ์ž์—ด str์ด S๋กœ ์‹œ์ž‘ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค.
    • True์™€ False๋ฐ˜ํ™˜
    • True == 1์ด๋ฏ€๋กœ sum์œผ๋กœ ํ•ฉ์น˜๋ฉด ํ•ด๋‹นํ•˜๋Š” ๊ฐœ์ˆ˜๋ฅผ ์•Œ ์ˆ˜ ์žˆ์Œ

๐Ÿ”ธ end ๐Ÿ”ธ

  • ์ฒซ ํ’€์ด๋Š” ๊ฐ™์€ ์›๋ฆฌ๋กœ ํ’€๊ธดํ–ˆ๋Š”๋ฐ, ๋‹ค๋ฅธ ํ’€์ด๋ฅผ ๋ณด๋‹ˆ for-else๋ฌธ์„ ์‚ฌ์šฉํ•ด์„œ ๋” ๊น”๋”ํ•˜๊ฒŒ ํ’€์—ˆ๊ธธ๋ž˜ ์ฐธ๊ณ ํ–ˆ๋‹ค.
    • ์ •๋ฆฌ ํฌ์ŠคํŒ…์„ ์ฐพ์•„๋ณด๋‹ˆ for-else๋ฌธ ๋ง๊ณ ๋„ while-else๋ฌธ๋„ ์žˆ์—ˆ๋‹ค. ์œ ์šฉํ•œ ๊ฒƒ ๊ฐ™๋‹ค.
  • ์ •๊ทœํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•œ ํ’€์ด๋Š” ํ•œ์ค„๋กœ ์•„์ฃผ ์งง์•„์„œ ๋ฐฐ์šธ์ ์ด ๋งŽ์•˜๋˜ ๊ฒƒ ๊ฐ™๋‹ค.
    • ์ •๊ทœํ‘œํ˜„์‹์„ ์•„์ง ์ž˜ ๋ชฐ๋ผ์„œ ์—ฌ๋Ÿฌ ํฌ์ŠคํŒ…์„ ์ฐพ์•„๋ณด๊ฒŒ ๋˜์—ˆ๋‹ค. ( re.sub() , [^] )
    • startswith()๋„ ์ฒ˜์Œ๋ณด๋Š” ํ•จ์ˆ˜์—ฌ์„œ ์ •๋ฆฌ ํฌ์ŠคํŒ…์„ ์ฐพ์•„๋ณด์•˜๋‹ค.
    • ์‹œ๊ฐ„์€ ๋ฏธ๋ฌ˜ํ•˜๊ฒŒ ์ •๊ทœํ‘œํ˜„์‹ ํ’€์ด๊ฐ€ ๋” ๋Š๋ ธ๋‹ค.

728x90