๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

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

[ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค] [1์ฐจ] ๋‹คํŠธ ๊ฒŒ์ž„ (Python)

1. ๋ฌธ์ œ ์„ค๋ช…

๋ฌธ์ œ ๋งํฌ

  • ์ž…๋ ฅ : 5, [2, 1, 2, 6, 2, 4, 3, 3]
  • ์ถœ๋ ฅ : [3,4,2,1,5] ์‹คํŒจ์œจ์ด ๋†’์€ ์Šคํ…Œ์ด์ง€์ˆœ์œผ๋กœ ์ถœ๋ ฅ

2. ์ฝ”๋“œ

solution1.py

import re

db = {'S':'**1', 'D':'**2','T':'**3','#':'*-1'}
def solution(dartResult):
    answer =''
    #dartResult์—์„œ '[SDT][*#]?'์ด๋Ÿฐ ํŒจํ„ด์„ ์ฐพ์œผ๋ฉด '\g<1> ' ๋ฐ”๊ฟ”์ฃผ๊ฒ ๋‹ค.
    # -> ํ•œ ์ ์ˆ˜๋งˆ๋‹ค ๊ทธ๋ฃนํ™”ํ•ด์„œ ๊ณต๋ฐฑ์„ ๋ถ™์—ฌ์คŒ
    for i in re.sub('([SDT][*#]?)', '\g<1> ',dartResult).split():
        #'*'์ฒ˜๋ฆฌ
        if i[-1] == '*': #ํ˜„์žฌ ์ ์ˆ˜์˜ ๋งˆ์ง€๋ง‰์— *์ด ์žˆ๋‹ค๋ฉด
            if answer: #์ด์ „ ์ ์ˆ˜๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
                answer = answer[:-1] + '*2+' #์ด์ „ ์ ์ˆ˜์˜ ๋งˆ์ง€๋ง‰ ๋ถ€ํ˜ธ์ธ +๋ฅผ ๋นผ๊ณ  *2+๋กœ ๋Œ€์ฒด
            i+='2'#ํ˜„์žฌ ์ ์ˆ˜ ๋’ค์—๋Š” ํ•ญ์ƒ 2๋ฅผ ๋ถ™์ด๊ธฐ -> *2๊ฐ€๋จ
        #*๋ฅผ ์ œ์™ธํ•œ ๋‹ค๋ฅธ ๋ฌธ์ž replace
        for j in db.keys():
            i = i.replace(j,db[j])
        answer+= i + '+'
    return eval(answer[:-1]) #๋งˆ์ง€๋ง‰์— ์žˆ๋Š” + ๊ธฐํ˜ธ๋Š” ์ง€์šด์ฑ„๋กœ eval์ ์šฉํ•ด์•ผํ•จ

3. ํšŒ๊ณ 

  • ์ •๊ทœํ‘œํ˜„์‹์„ ์จ์•ผํ•œ๋‹ค.

  • S, D, T, #์€ ๊ทœ์น™์ด ๊ฐ„๋‹จํ•˜๋‹ˆ, ๋”•์…”๋„ˆ๋ฆฌ์— ๋„ฃ์–ด์„œ ๊ทœ์น™์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ณ 

  • * ๊ฐ™์€ ๊ฒฝ์šฐ๋Š” ์ง์ ‘ ๊ตฌํ˜„ํ•ด์ค€๋‹ค.

  • sub๋Š” ์„ธ๋ฒˆ์งธ์š”์†Œ์˜ ๋ฌธ์ž์—ด์—์„œ ์ฒซ๋ฒˆ์งธ ์š”์†Œ์™€ ๊ฐ™์€ ํŒจํ„ด์„ ๋ฐœ๊ฒฌํ•˜๋ฉด ๋‘๋ฒˆ์งธ ์š”์†Œ์˜ ๋ชจ์–‘์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ๊ฒƒ์ด๋‹ค.

    • ์—ฌ๊ธฐ์„œ๋Š” ([SDT][*#]?) ์™€ ๊ฐ™์€ ํ˜•ํƒœ์˜ ๋ฌธ์ž์—ด์—์„œ \g<1> ์ฒซ๋ฒˆ์งธ ๊ทธ๋ฃน(๊ด„ํ˜ธ์•ˆ์— ์‹ธ์—ฌ์žˆ๋Š” ์ „์ฒด, ํ˜„์žฌ ๊ทธ๋ฃน1๋งŒ ์žˆ์Œ) ์ด ์กด์žฌํ•˜๋ฉด ๊ณต๋ฐฑ์„ ๋ถ™์—ฌ์ค€๋‹ค.
    • ๋ฌผ์Œํ‘œ๋Š” [#]๊ฐ€ 0๊ฐœ ๋˜๋Š” 1๊ฐœ์ด์ƒ ๋“ฑ์žฅํ•  ๋•Œ ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. SDT๋Š” ๋ฐ˜๋“œ์‹œ ๋‚˜์˜ค์ง€๋งŒ \, #์€ ํ•„์ˆ˜๊ฐ€ ์•„๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋ฌผ์Œํ‘œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
  • split()์„ ํ†ตํ•ด ๊ณต๋ฐฑ ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ ์„œ ํ•œ ์ ์ˆ˜์”ฉ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.

  • ํ•œ ์ ์ˆ˜์”ฉ *์„ ๋งŒ๋‚ฌ์„ ๋•Œ, ๊ทœ์น™์„ ์ ์šฉํ•˜๊ณ , ๋‚˜๋จธ์ง€ ๊ธฐํ˜ธ๋“ค๋„ ๊ทœ์น™์ ์šฉ์„ ํ•œ๋‹ค.

  • eval์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฌธ์ž๋กœ๋œ ๊ธฐํ˜ธ๋“ค์„ ๊ณ„์‚ฐํ•ด์ค€๋‹ค. ex) eval('2**2') = 4

4. ์ฐธ๊ณ 

https://www.youtube.com/watch?v=6e0BwkjF75Y