์ฝ”ํ…Œ์ค€๋น„

<Greedy> ๋ฐฑ์ค€ 1541๋ฒˆ. ์žƒ์–ด๋ฒ„๋ฆฐ ๊ด„ํ˜ธ (์˜ค๋‹ต๋…ธํŠธ) + ๋‹ค์‹œ

์š”๋Œœ๋‹ค 2022. 7. 23. 23:06

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() ์กด์žฌ