[BOJ] 1541๋ฒˆ | ์žƒ์–ด๋ฒ„๋ฆฐ ๊ด„ํ˜ธ (Python3)

2022. 7. 12. 18:48ใ†Coding Test/BOJ

๐Ÿ”—๋ฌธ์ œ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ
 

1541๋ฒˆ: ์žƒ์–ด๋ฒ„๋ฆฐ ๊ด„ํ˜ธ

์ฒซ์งธ ์ค„์— ์‹์ด ์ฃผ์–ด์ง„๋‹ค. ์‹์€ ‘0’~‘9’, ‘+’, ๊ทธ๋ฆฌ๊ณ  ‘-’๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ€์žฅ ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋Š” ์ˆซ์ž์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ์†ํ•ด์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ณ , 5์ž๋ฆฌ๋ณด๋‹ค

www.acmicpc.net

 

 

๋ฌธ์ œ ์„ค๋ช…

์„ธ์ค€์ด๋Š” ์–‘์ˆ˜์™€ +, -, ๊ทธ๋ฆฌ๊ณ  ๊ด„ํ˜ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์‹์„ ๋งŒ๋“ค์—ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์„ธ์ค€์ด๋Š” ๊ด„ํ˜ธ๋ฅผ ๋ชจ๋‘ ์ง€์› ๋‹ค.
๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ ์„ธ์ค€์ด๋Š” ๊ด„ํ˜ธ๋ฅผ ์ ์ ˆํžˆ ์ณ์„œ ์ด ์‹์˜ ๊ฐ’์„ ์ตœ์†Œ๋กœ ๋งŒ๋“ค๋ ค๊ณ  ํ•œ๋‹ค.
๊ด„ํ˜ธ๋ฅผ ์ ์ ˆํžˆ ์ณ์„œ ์ด ์‹์˜ ๊ฐ’์„ ์ตœ์†Œ๋กœ ๋งŒ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์‹œ์˜ค.

 


์ž…๋ ฅ

์ฒซ์งธ ์ค„์— ์‹์ด ์ฃผ์–ด์ง„๋‹ค. ์‹์€ ‘0’~‘9’, ‘+’, ๊ทธ๋ฆฌ๊ณ  ‘-’๋งŒ์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๊ณ , ๊ฐ€์žฅ ์ฒ˜์Œ๊ณผ ๋งˆ์ง€๋ง‰ ๋ฌธ์ž๋Š” ์ˆซ์ž์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ์†ํ•ด์„œ ๋‘ ๊ฐœ ์ด์ƒ์˜ ์—ฐ์‚ฐ์ž๊ฐ€ ๋‚˜ํƒ€๋‚˜์ง€ ์•Š๊ณ , 5์ž๋ฆฌ๋ณด๋‹ค ๋งŽ์ด ์—ฐ์†๋˜๋Š” ์ˆซ์ž๋Š” ์—†๋‹ค. ์ˆ˜๋Š” 0์œผ๋กœ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ž…๋ ฅ์œผ๋กœ ์ฃผ์–ด์ง€๋Š” ์‹์˜ ๊ธธ์ด๋Š” 50๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.

 


์ถœ๋ ฅ

์ฒซ์งธ ์ค„์— ์ •๋‹ต์„ ์ถœ๋ ฅํ•œ๋‹ค.

 


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

 


ํ’€์ด ์ „๋žต

์ฒ˜์Œ์—” +์™€ -๋งŒ ์žˆ๋Š” ์ˆ˜์‹์—์„œ ๊ด„ํ˜ธ๋ฅผ ์นœ๋‹ค๊ณ  ๊ฐ’์ด ๋‹ฌ๋ผ์ง€๋‚˜?.. ๋ผ๋Š” ์ƒ๊ฐ์„ ํ–ˆ์—ˆ๋Š”๋ฐ ๋ถ„๋ฐฐ ๋ฒ•์น™์„ ์ด์šฉํ•˜๋Š” ๋ฌธ์ œ์˜€์Šต๋‹ˆ๋‹ค.

55 - 50 + 40  ->  50 -(50 + 40) = -35

ํ’€์ด๊ณผ์ •์€ ๊ทธ๋ฆฌ ์–ด๋ ต์ง€ ์•Š์œผ๋‚˜, ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ํŒŒ์‹ฑ(parsing)ํ•˜๋Š” ๊ณผ์ •์ด ๊ท€์ฐฎ์•˜์Šต๋‹ˆ๋‹ค.

๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ํ‘ผ ์ฝ”๋“œ๋“ค์„ ๋ณด๋‹ˆ List Comprehension์„ ์ด์šฉํ•ด์„œ ๋‹จ 2์ค„๋งŒ์— ํ‘ผ ์‚ฌ๋žŒ๋„ ์žˆ๋„ค์š”... (๋‚ด ์ฝ”๋“œ๋Š”...)

 

์ œ ํ’€์ด๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ์šฐ์„  ๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ฆฌ์ŠคํŠธ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜์ตœ์†Ÿ๊ฐ’์„ ๊ตฌํ•˜๋Š” ํ•จ์ˆ˜ ์ด๋ ‡๊ฒŒ ๋‘ ๊ฐ€์ง€๋กœ ๋‚˜๋ˆ„๊ธฐ
  • ๋ฌธ์ œ ์กฐ๊ฑด์— ์˜ํ•ด, ์ฒซ ๋ฒˆ์งธ ์ˆซ์ž๋Š” ๋ฌด์กฐ๊ฑด ์–‘์ˆ˜
  • ์–‘์ˆ˜๋Š” ๊ด„ํ˜ธ ์น˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†๊ณ , ์Œ์ˆ˜๊ฐ€ ๋‚˜์™”์„ ๋•Œ ๊ฒฐ์ •
    • ๊ทธ ๋‹ค์Œ ์ˆซ์ž ๋˜ํ•œ ์Œ์ˆ˜๋ผ๋ฉด ๋ถ„๋ฐฐ ๋ฒ•์น™์„ ํ•  ๊ฒฝ์šฐ, ์˜คํžˆ๋ ค ์ˆซ์ž๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋ฏ€๋กœ ๊ทธ๋Œ€๋กœ ๋‘๊ธฐ
    • ๊ทธ ๋‹ค์Œ ์ˆซ์ž๊ฐ€ ์–‘์ˆ˜๋ผ๋ฉด ๋ถ„๋ฐฐ ๋ฒ•์น™์„ ์ ์šฉํ•˜์—ฌ ๊ทธ ๋‹ค์Œ ์ˆซ์ž์— -1์„ ๊ณฑํ•ด์ฃผ๊ธฐ
  • ์ˆซ์ž์˜ ๋งจ ์•ž์— 0์ด ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ, ์ด ๋ถ€๋ถ„์„ ๊ฒ€์‚ฌํ•˜๋Š” ๋ณ€์ˆ˜ ๋˜ํ•œ ํ•„์š”

 


์†Œ์Šค ์ฝ”๋“œ ๋ฐ ๊ฒฐ๊ณผ

๋ฌธ์ž์—ด์„ ์ˆซ์ž๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ToNumber() ํ•จ์ˆ˜

def ToNumber(stringFormular):
    result = []
    strInt = ""
    preOperator = '+'
    isFirstZero = True
    
    for element in stringFormular:
        if element.isdigit():   # ์ˆซ์ž์ผ ๊ฒฝ์šฐ
           if element == '0' and isFirstZero:  # ์ œ์ผ ํฐ ์ž๋ฆฌ์ˆ˜๊ฐ€ 0์ผ ๊ฒฝ์šฐ
               continue
           strInt += element

           if isFirstZero:                     # '40'์ฒ˜๋Ÿผ ์ดํ›„์˜ 0์ด ์ƒ๋žต๋˜์ง€ ์•Š๋„๋ก
               isFirstZero = False
        
        else:                   # ๋ถ€ํ˜ธ์ผ ๊ฒฝ์šฐ
            data = int(strInt)
            if preOperator == '-':
                data *= -1
            preOperator = element
            isFirstZero = True
            result.append(data)
            strInt = ""
    
    # for ๋ฌธ์ด ๋๋‚˜๋ฉด ๋งจ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๊ฐ€ list์— ์ถ”๊ฐ€๋˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ถ”๊ฐ€ ์ž‘์—… ์‹œํ–‰
    data = int(strInt)
    if preOperator == '-':
        data *= -1
    preOperator = element
    result.append(data)
    return result

์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„์ฃผ๋Š” Solution() ํ•จ์ˆ˜

def Solution(operands):
    N = len(operands)
    _sum = 0
    
    for i in range(N - 1):
        if operands[i] < 0:         # ์Œ์ˆ˜์ผ ๊ฒฝ์šฐ ๊ทธ ๋‹ค์Œ ์ˆ˜๋ฅผ ํ™•์ธ
            if operands[i+1] >= 0:  # (- +)์˜ ๊ฒฝ์šฐ ์ˆ˜ํ–‰
                operands[i+1] *= -1
        _sum += operands[i]
    
    _sum += operands[-1]            # ๋งจ ๋งˆ์ง€๋ง‰ ์ˆซ์ž๋Š” ๊ณ„์‚ฐ ์•ˆ ๋์œผ๋ฏ€๋กœ
    return _sum

__main__

expression = input()
operands = ToNumber(expression)
result = Solution(operands)
print(result)

 

728x90
๋ฐ˜์‘ํ˜•