DevYoon

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‘˜ ๋งŒ์˜ ์•”ํ˜ธ (Python) ๋ณธ๋ฌธ

PS/Programmers

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] ๋‘˜ ๋งŒ์˜ ์•”ํ˜ธ (Python)

gimewn 2023. 2. 5. 22:44

link ๐Ÿ”— https://school.programmers.co.kr/learn/courses/30/lessons/155652#

 

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

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

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

๋‘ ๋ฌธ์ž์—ด s์™€ skip, ๊ทธ๋ฆฌ๊ณ  ์ž์—ฐ์ˆ˜ index๊ฐ€ ์ฃผ์–ด์งˆ ๋•Œ, ๋‹ค์Œ ๊ทœ์น™์— ๋”ฐ๋ผ ๋ฌธ์ž์—ด์„ ๋งŒ๋“ค๋ ค ํ•ฉ๋‹ˆ๋‹ค. ์•”ํ˜ธ์˜ ๊ทœ์น™์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ž์—ด s์˜ ๊ฐ ์•ŒํŒŒ๋ฒณ์„ index๋งŒํผ ๋’ค์˜ ์•ŒํŒŒ๋ฒณ์œผ๋กœ ๋ฐ”๊ฟ”์ค๋‹ˆ๋‹ค.
  • index๋งŒํผ์˜ ๋’ค์˜ ์•ŒํŒŒ๋ฒณ์ด z๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ๋‹ค์‹œ a๋กœ ๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.
  • skip์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ ์ œ์™ธํ•˜๊ณ  ๊ฑด๋„ˆ๋œ๋‹ˆ๋‹ค.

 

์˜ˆ๋ฅผ ๋“ค์–ด s = "aukks", skip = "wbqd", index = 5์ผ ๋•Œ, a์—์„œ 5๋งŒํผ ๋’ค์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ f์ง€๋งŒ [b, c, d, e, f]์—์„œ 'b'์™€ 'd'๋Š” skip์— ํฌํ•จ๋˜๋ฏ€๋กœ ์„ธ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ 'b', 'd'๋ฅผ ์ œ์™ธํ•˜๊ณ  'a'์—์„œ 5๋งŒํผ ๋’ค์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์€ [c, e, f, g, h] ์ˆœ์„œ์— ์˜ํ•ด 'h'๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋จธ์ง€ "ukks" ๋˜ํ•œ ์œ„ ๊ทœ์น™๋Œ€๋กœ ๋ฐ”๊พธ๋ฉด "appy"๊ฐ€ ๋˜๋ฉฐ ๊ฒฐ๊ณผ๋Š” "happy"๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฌธ์ž์—ด s์™€ skip, ๊ทธ๋ฆฌ๊ณ  ์ž์—ฐ์ˆ˜ index๊ฐ€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ์ฃผ์–ด์งˆ ๋•Œ ์œ„ ๊ทœ์น™๋Œ€๋กœ s๋ฅผ ๋ณ€ํ™˜ํ•œ ๊ฒฐ๊ณผ๋ฅผ returnํ•˜๋„๋ก solution ํ•จ์ˆ˜๋ฅผ ์™„์„ฑํ•ด์ฃผ์„ธ์š”.

 

์ œํ•œ์‚ฌํ•ญ

  • 5 ≤ s์˜ ๊ธธ์ด ≤ 50
  • 1 ≤ skip์˜ ๊ธธ์ด ≤ 10
  • s์™€ skip์€ ์•ŒํŒŒ๋ฒณ ์†Œ๋ฌธ์ž๋กœ๋งŒ ์ด๋ฃจ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค.
    • skip์— ํฌํ•จ๋˜๋Š” ์•ŒํŒŒ๋ฒณ์€ s์— ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • 1 ≤ index ≤ 20

 


 

def solution(s, skip, index):
    answer = ''
    # skip ์—ฌ๋ถ€ ๊ธฐ๋ก ๋ฆฌ์ŠคํŠธ
    check = [1] * ((ord('z') - ord('a')) + 1)
    last = len(check)
    
    # skip ์•ŒํŒŒ๋ฒณ ๊ธฐ๋ก
    for skipAlp in skip:
        check[ord(skipAlp) - ord('a')] = 0
    
    for alp in s:
        idx = 1
        # skip์— ์—†๋Š” ์•ŒํŒŒ๋ฒณ ๊ฑด๋„ˆ ๋›ด ํšŸ์ˆ˜
        passIdx = 0
        change = ''
        alpOrd = ord(alp) - ord('a')
        # index ์ด์ƒ ๊ฑด๋„ˆ๋›ฐ๋ฉด ์ข…๋ฃŒ
        while passIdx < index:
            checkOrd = alpOrd + idx
            # ํ˜„์žฌ ์œ„์น˜๊ฐ€ ๋ฆฌ์ŠคํŠธ ๋ฒ—์–ด๋‚˜๋ฉด (z๋ฅผ ๋„˜์–ด๊ฐ€๋ฉด)
            if checkOrd >= last:
                # ๋‹ค์‹œ a๋กœ ๋ณต๊ท€
                checkOrd %= last
            
            # ๊ฑด๋„ˆ ๋›ธ ์ˆ˜ ์žˆ์œผ๋ฉด (skip์— ํ•ด๋‹น ์•ŒํŒŒ๋ฒณ ์—†์œผ๋ฉด)
            if check[checkOrd]:
                # pass
                passIdx += 1
                # passํ•œ ํšŸ์ˆ˜๊ฐ€ ์ธ๋ฑ์Šค์™€ ๊ฐ™์œผ๋ฉด => answer์— ์•ŒํŒŒ๋ฒณ ๋”ํ•˜๊ธฐ
                if passIdx == index:
                    change = chr(checkOrd + ord('a'))
            # ๋‹ค์Œ ์•ŒํŒŒ๋ฒณ์œผ๋กœ
            idx += 1
            
        answer += change
        
    return answer

 

โœ๏ธ s์˜ ๊ฐ ์•ŒํŒŒ๋ฒณ์„ index๊ฐœ ๋’ค์— ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ๊ต์ฒดํ•ด์ค˜์•ผ ํ•˜๋Š”๋ฐ, ๋งŒ์•ฝ ์ค‘๊ฐ„์— skip์— ๋“ค์–ด ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์ด๋ผ๋ฉด ๊ฑด๋„ˆ๋›ฐ์–ด์•ผ ํ•œ๋‹ค. ์ด ์ ์ด ๋กœ์ง์„ ์งœ๋Š”๋ฐ ์กฐ๊ธˆ ํ—ท๊ฐˆ๋ ธ๋‹ค.

โœ๏ธ idx๋Š” skip์— ์•ŒํŒŒ๋ฒณ์ด ์žˆ๋“  ์—†๋“ , ์ผ๋‹จ ๋‹ค์Œ ์นธ์œผ๋กœ ๊ฐ€๊ธฐ ์œ„ํ•œ ๋ณ€์ˆ˜์ด๋‹ค.

โœ๏ธ passIdx๋ผ๋Š” ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์„œ, ๋งŒ์•ฝ ์ด ๋ณ€์ˆ˜์˜ ๊ฐ’์ด index์™€ ๊ฐ™์•„์ง„๋‹ค๋ฉด a๋ณด๋‹ค skip์ด ๋ฐ˜์˜๋˜๋ฉด์„œ index๊ฐœ ๋’ค์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ์„ ์ฐพ์€ ๊ฒƒ์ด๋ฏ€๋กœ answer์— ๋”ํ•ด์ค€๋‹ค.

โœ๏ธ ์ผ๋ถ€ ๋ฌธ์ œ์—์„œ ์ธ๋ฑ์Šค ์—๋Ÿฌ๊ฐ€ ๋‚ฌ๋Š”๋ฐ, ์œ„์น˜๊ฐ€ 'z'๋ฅผ ๋„˜์–ด๊ฐˆ ๊ฒฝ์šฐ ๋‹ค์‹œ 'a'๋กœ ๋ณต๊ท€ํ•ด์ฃผ๋Š” ๊ณผ์ •์—์„œ ๋ฌธ์ œ๊ฐ€ ์žˆ์—ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋‹จ์ˆœํžˆ 26(z์˜ ์ˆœ๋ฒˆ)์„ ๋นผ์คฌ๋Š”๋ฐ, ๋ช‡ ๋ฐ”ํ€ด๋ฅผ ๋Œ ์ˆ˜๋„ ์žˆ๋‹ค๋Š” ๊ฑธ ๊ฐ„๊ณผํ–ˆ๋‹ค! ๊ทธ๋ž˜์„œ 26์„ ๋นผ๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, 26์œผ๋กœ ๋‚˜๋ˆˆ ๋‚˜๋จธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋กœ์ง์„ ์ˆ˜์ •ํ–ˆ๋‹ค.