[Python - ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค Level1] ๋‹คํŠธ ๊ฒŒ์ž„

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

๋ฐ˜์‘ํ˜•

 

 

์ฝ”๋”ฉํ…Œ์ŠคํŠธ ์—ฐ์Šต - [1์ฐจ] ๋‹คํŠธ ๊ฒŒ์ž„

 

programmers.co.kr

 

๋ฌธ์ œ ์„ค๋ช…

์นด์นด์˜คํ†ก ๊ฒŒ์ž„๋ณ„์˜ ํ•˜๋ฐ˜๊ธฐ ์‹ ๊ทœ ์„œ๋น„์Šค๋กœ ๋‹คํŠธ ๊ฒŒ์ž„์„ ์ถœ์‹œํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์€ ๋‹คํŠธํŒ์— ๋‹คํŠธ๋ฅผ ์„ธ ์ฐจ๋ก€ ๋˜์ ธ ๊ทธ ์ ์ˆ˜์˜ ํ•ฉ๊ณ„๋กœ ์‹ค๋ ฅ์„ ๊ฒจ๋ฃจ๋Š” ๊ฒŒ์ž„์œผ๋กœ, ๋ชจ๋‘๊ฐ€ ๊ฐ„๋‹จํžˆ ์ฆ๊ธธ ์ˆ˜ ์žˆ๋‹ค.
๊ฐ“ ์ž…์‚ฌํ•œ ๋ฌด์ง€๋Š” ์ฝ”๋”ฉ ์‹ค๋ ฅ์„ ์ธ์ •๋ฐ›์•„ ๊ฒŒ์ž„์˜ ํ•ต์‹ฌ ๋ถ€๋ถ„์ธ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง์„ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ๋‹คํŠธ ๊ฒŒ์ž„์˜ ์ ์ˆ˜ ๊ณ„์‚ฐ ๋กœ์ง์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

  1. ๋‹คํŠธ ๊ฒŒ์ž„์€ ์ด 3๋ฒˆ์˜ ๊ธฐํšŒ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.
  2. ๊ฐ ๊ธฐํšŒ๋งˆ๋‹ค ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ ์ˆ˜๋Š” 0์ ์—์„œ 10์ ๊นŒ์ง€์ด๋‹ค.
  3. ์ ์ˆ˜์™€ ํ•จ๊ป˜ Single(S), Double(D), Triple(T) ์˜์—ญ์ด ์กด์žฌํ•˜๊ณ  ๊ฐ ์˜์—ญ ๋‹น์ฒจ ์‹œ ์ ์ˆ˜์—์„œ 1์ œ๊ณฑ, 2์ œ๊ณฑ, 3์ œ๊ณฑ (์ ์ˆ˜1 , ์ ์ˆ˜2 , ์ ์ˆ˜3 )์œผ๋กœ ๊ณ„์‚ฐ๋œ๋‹ค.
  4. ์˜ต์…˜์œผ๋กœ ์Šคํƒ€์ƒ(*) , ์•„์ฐจ์ƒ(#)์ด ์กด์žฌํ•˜๋ฉฐ ์Šคํƒ€์ƒ(*) ๋‹น์ฒจ ์‹œ ํ•ด๋‹น ์ ์ˆ˜์™€ ๋ฐ”๋กœ ์ „์— ์–ป์€ ์ ์ˆ˜๋ฅผ ๊ฐ 2๋ฐฐ๋กœ ๋งŒ๋“ ๋‹ค. ์•„์ฐจ์ƒ(#) ๋‹น์ฒจ ์‹œ ํ•ด๋‹น ์ ์ˆ˜๋Š” ๋งˆ์ด๋„ˆ์Šค๋œ๋‹ค.
  5. ์Šคํƒ€์ƒ(*)์€ ์ฒซ ๋ฒˆ์งธ ๊ธฐํšŒ์—์„œ๋„ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ฒซ ๋ฒˆ์งธ ์Šคํƒ€์ƒ(*)์˜ ์ ์ˆ˜๋งŒ 2๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 4๋ฒˆ ์ฐธ๊ณ )
  6. ์Šคํƒ€์ƒ(*)์˜ ํšจ๊ณผ๋Š” ๋‹ค๋ฅธ ์Šคํƒ€์ƒ(*)์˜ ํšจ๊ณผ์™€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ค‘์ฒฉ๋œ ์Šคํƒ€์ƒ(*) ์ ์ˆ˜๋Š” 4๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 4๋ฒˆ ์ฐธ๊ณ )
  7. ์Šคํƒ€์ƒ(*)์˜ ํšจ๊ณผ๋Š” ์•„์ฐจ์ƒ(#)์˜ ํšจ๊ณผ์™€ ์ค‘์ฒฉ๋  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ค‘์ฒฉ๋œ ์•„์ฐจ์ƒ(#)์˜ ์ ์ˆ˜๋Š” -2๋ฐฐ๊ฐ€ ๋œ๋‹ค. (์˜ˆ์ œ 5๋ฒˆ ์ฐธ๊ณ )
  8. Single(S), Double(D), Triple(T)์€ ์ ์ˆ˜๋งˆ๋‹ค ํ•˜๋‚˜์”ฉ ์กด์žฌํ•œ๋‹ค.
  9. ์Šคํƒ€์ƒ(*), ์•„์ฐจ์ƒ(#)์€ ์ ์ˆ˜๋งˆ๋‹ค ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์กด์žฌํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ๋‹ค.

0~10์˜ ์ •์ˆ˜์™€ ๋ฌธ์ž S, D, T, *, #๋กœ ๊ตฌ์„ฑ๋œ ๋ฌธ์ž์—ด์ด ์ž…๋ ฅ๋  ์‹œ ์ด์ ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ์ž‘์„ฑํ•˜๋ผ.

 

์ž…๋ ฅํ˜•์‹

์ ์ˆ˜|๋ณด๋„ˆ์Šค|[์˜ต์…˜]์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฌธ์ž์—ด 3์„ธํŠธ.
์˜ˆ) 1S2D*3T

  • ์ ์ˆ˜๋Š” 0์—์„œ 10 ์‚ฌ์ด์˜ ์ •์ˆ˜์ด๋‹ค.
  • ๋ณด๋„ˆ์Šค๋Š” S, D, T ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
  • ์˜ต์„ ์€ *์ด๋‚˜ # ์ค‘ ํ•˜๋‚˜์ด๋ฉฐ, ์—†์„ ์ˆ˜๋„ ์žˆ๋‹ค.

์ถœ๋ ฅํ˜•์‹

3๋ฒˆ์˜ ๊ธฐํšŒ์—์„œ ์–ป์€ ์ ์ˆ˜ ํ•ฉ๊ณ„์— ํ•ด๋‹นํ•˜๋Š” ์ •์ˆ˜๊ฐ’์„ ์ถœ๋ ฅํ•œ๋‹ค.
์˜ˆ) 37

 

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

 

ํ’€์ด ๊ณผ์ •

์กฐ๊ฑด์ด ๋งค์šฐ ๊นŒ๋‹ค๋กœ์šด ๋ฌธ์ œ๋ผ if/else๋ฌธ์„ ์—ฌ๋Ÿฌ๊ฐœ ์จ์„œ ๋ถ„๊ธฐ ์ฒ˜๋ฆฌํ•˜์—ฌ ๋ฌธ์ œ๋ฅผ ํ’€์—ˆ๋‹ค. ๋ฌธ์ œ์˜ ์ •๋‹ต์€ ๋งž์•˜์ง€๋งŒ ๊น”๋”ํ•˜์ง€ ์•Š์€ ๋ฌธ์ œ์˜€๋‹ค. 

ํ”„๋กœ๊ทธ๋ž˜๋จธ์Šค์—์„œ ๋‹ค๋ฅธ ํ‘ผ ๋ฐฉ์‹์„ ๋ณด๊ณ  ๋งค์šฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ตฌ๋‚˜,, ์ƒˆ์‚ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งŽ์ด ํ’€์–ด๋ด์•ผ๊ฒ ๋‹ค๋Š” ๋‹ค์ง์„ ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค.

 

def solution(dartResult):
    answer = 0
    dart = list(dartResult)
    dart = list(reversed(dart))
    index = -1
    num = 0
    renum = 0
    while len(dart) > 0:
        item = dart.pop()
        if item != 'S' and item != 'D' and item != 'T' and item != '*' and item != '#':
            reitem = dart.pop()
            if  reitem!= 'S' and reitem != 'D' and reitem != 'T' and reitem != '*' and reitem != '#':
                num = int(item+reitem)
            else:
                num = int(item)
                dart.append(reitem)
        else:
            if item == 'S' or item == 'D' or item == 'T':
                index += 1
                if item == 'S':
                    num = num
                elif item == 'D':
                    num = num ** 2
                else:
                    num = num ** 3

                if len(dart) > 0:
                    mode = dart.pop()
                    if mode == '*' or mode == '#':
                        if mode == '*':
                            num = num * 2
                            answer -= renum
                            renum = renum * 2
                            answer = answer + renum + num
                        if mode == '#':
                            num = -num
                            answer = answer + num

                    else:
                        dart.append(mode)
                        answer = answer + num
                else:
                    answer = answer + num

                renum = num

    return answer

 

๋‹ค๋ฅธ ๋ฐฉ์‹์˜ ํ’€์ด ๊ณผ์ •

def solution(dartResult):
    answer = []
    dartResult = dartResult.replace('10','k')
    point = ['10' if i == 'k' else i for i in dartResult]
    print(point)

    i = -1
    sdt = ['S', 'D', 'T']
    for j in point:
        if j in sdt :
            answer[i] = answer[i] ** (sdt.index(j)+1)
        elif j == '*':
            answer[i] = answer[i] * 2
            if i != 0 :
                answer[i - 1] = answer[i - 1] * 2
        elif j == '#':
            answer[i] = answer[i] * (-1)
        else:
            answer.append(int(j))
            i += 1
    return sum(answer)

 

๋ฐ˜์‘ํ˜•