2022. 7. 12. 18:48ใCoding Test/BOJ
๐๋ฌธ์ ๋ณด๋ฌ๊ฐ๊ธฐ
๋ฌธ์ ์ค๋ช
์ธ์ค์ด๋ ์์์ +, -, ๊ทธ๋ฆฌ๊ณ ๊ดํธ๋ฅผ ๊ฐ์ง๊ณ ์์ ๋ง๋ค์๋ค. ๊ทธ๋ฆฌ๊ณ ๋์ ์ธ์ค์ด๋ ๊ดํธ๋ฅผ ๋ชจ๋ ์ง์ ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ์ธ์ค์ด๋ ๊ดํธ๋ฅผ ์ ์ ํ ์ณ์ ์ด ์์ ๊ฐ์ ์ต์๋ก ๋ง๋ค๋ ค๊ณ ํ๋ค.
๊ดํธ๋ฅผ ์ ์ ํ ์ณ์ ์ด ์์ ๊ฐ์ ์ต์๋ก ๋ง๋๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
์ ๋ ฅ
์ฒซ์งธ ์ค์ ์์ด ์ฃผ์ด์ง๋ค. ์์ ‘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)
'Coding Test > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 10162๋ฒ | ์ ์๋ ์ธ์ง (Python3) (0) | 2022.07.14 |
---|---|
[BOJ] 2217๋ฒ | ๋กํ (Python3) (0) | 2022.07.14 |
[BOJ] 5585๋ฒ | ๊ฑฐ์ค๋ฆ๋ (Python3) (0) | 2022.07.13 |
[BOJ] 1026๋ฒ | ๋ณด๋ฌผ (Python3) (0) | 2022.07.07 |
[BOJ] 10026๋ฒ | ์ ๋ก์์ฝ (Python3) (0) | 2022.05.14 |