<Greedy> ๋ฐฑ์ค 1541๋ฒ. ์์ด๋ฒ๋ฆฐ ๊ดํธ (์ค๋ต๋ ธํธ) + ๋ค์
https://www.acmicpc.net/problem/1541
1541๋ฒ: ์์ด๋ฒ๋ฆฐ ๊ดํธ
์ฒซ์งธ ์ค์ ์์ด ์ฃผ์ด์ง๋ค. ์์ ‘0’~‘9’, ‘+’, ๊ทธ๋ฆฌ๊ณ ‘-’๋ง์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๊ณ , ๊ฐ์ฅ ์ฒ์๊ณผ ๋ง์ง๋ง ๋ฌธ์๋ ์ซ์์ด๋ค. ๊ทธ๋ฆฌ๊ณ ์ฐ์ํด์ ๋ ๊ฐ ์ด์์ ์ฐ์ฐ์๊ฐ ๋ํ๋์ง ์๊ณ , 5์๋ฆฌ๋ณด๋ค
www.acmicpc.net
์๊ณ ๋ฆฌ์ฆ :
๊ดํธ๋ฅผ ์ณ์ ์์ ๊ฐ์ด ์ต์๊ฐ ๋๊ธฐ ์ํด์ , - ์ดํ์ ๊ฐ์ด ์ต๋ํ ์ปค์ผํ ๊ฒ์ด๋ค.
๋ด ํ์ด :
n = input()
lst = n.split("-")
for i in range(len(lst)):
lst[i] = lst[i].lstrip("0")
lst[i] = eval(lst[i])
result = lst[0]
for i in range(1, len(lst)):
result -= lst[i]
print(result)
๋ฌธ์ ์์ ์ถ๋ ฅ์ ๋ชจ๋ ๊ฐ๊ฒ ๋์์ง๋ง, runtime error(syntax error)๊ฐ ๋ด๋ค. eval() ํจ์๋ฅผ ๋ง์๋๊ฑด๊ฐ ??
์ด์ฐ๋๋ ๋ค๋ฅธ ๋ถ์ ์ ๋ต์ ํตํด ์ค๋ต์ ์์ ํ์
์ ๋ต ํ์ด :
a = input().split('-')
sum = 0
#line 1
for i in a[0].split('+'):
sum += int(i)
#line 2
for i in a[1:]:
for j in i.split('+'):
sum -= int(j)
print(sum)
์ ๋ ฅ์ '50+40+20-60-200-10+30-70'์ ๋ฐ์๋ค๋ฉด, split('-')์ ์ํด, ['50+40+20', '60', '200', '10+30', '70' ]์ด a ๋ณ์์ ๋์ ๋ ๊ฒ์ด๋ค.
### ๋ผ์ธ 1
์ฐจ๊ทผ์ฐจ๊ทผ ํ์ด๋ณด์. a[0]์ '50+40+20'์ธ๋ฐ split('+')์ ์ํด '50', '40', '20'์ผ๋ก ๋๋์ด์ง ๊ฒ์ด๋ค. ๋ชจ๋ sum์ ๋ํด์ฃผ์! ์๋ฃํ์ str์ด๋ฏ๋ก int๋ก ๋ฐ๊ฟ์ค ๋ค ๋ํด์ค๋ค.
### ๋ผ์ธ 2
๊ทธ ๋ค์ ์์๋ค๋ ๋ฐ๋ณตํด์ฃผ๊ธฐ ์ํด, a ๋ฆฌ์คํธ์ 1๋ฒ์งธ ์์๋ถํฐ ๋ฐ๋ณต๋ฌธ์ ๋ง๋ค์ด์ฃผ์. (0๋ฒ์งธ ์์๋ ์ด๋ฏธ ์ํํ์ผ๋๊น!)
๊ทธ ๊ฐ๊ฐ์ ์์ i๊ฐ '10+30'์ฒ๋ผ '+' ๊ธฐํธ๊ฐ ์์ ์ ์์ผ๋ split('+')์ ์ด์ฉํด int๋ก ๋ณํํด์ฃผ์. ์ดํ sum์ ๋ชจ๋ ๋นผ์ฃผ๋ฉด ๋๋ค!
์๋ํ๋ฉด ๋ชจ๋ ์์ ์์ '-'๊ธฐํธ๊ฐ ์๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๋ผ์ธ 1๊ณผ ๋ผ์ธ 2๋ฅผ ๋๋ ์ ์งํํ ์ด์ ๋ ๋ค์๊ณผ ๊ฐ๋ค. 0๋ฒ์งธ ์์๋ +ํํ์ด๊ธฐ ๋๋ฌธ์ ๋ผ์ธ 2์ฒ๋ผ ๋นผ์ฃผ๋ฉด ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
์ ์ฝ๋๋ ๋ค๋ฅธ ๋ถ์ ์ฝ๋๋ฅผ ์ฐธ๊ณ ํ์๋ค. ๊ฐ์ฌํฉ๋๋ค ๊พธ๋ฒ
ํบ์๋ณด๊ธฐ :
- eval()ํจ์
str ์๋ฃํ์ธ "50+40"์ eval์ ํตํด 90์ผ๋ก ๋ง๋ค ์ ์๋ค.
- lstrip()ํจ์
์์ ์๋ 0์ ์ง์ธ ์ ์๋ค. lstrip("0")์ ํ๋ฉด "00009"๊ฐ "9"๊ฐ ๋๋ค. ์ด ํจ์ ๋ง๊ณ ๋ strip(), rstrip() ์กด์ฌ