알고리즘 공부(C++)

백준 1541 잃어버린 괄호

혀니리리 2022. 8. 27. 14:13
728x90

1541번: 잃어버린 괄호 (acmicpc.net)

 

1541번: 잃어버린 괄호

첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다

www.acmicpc.net

nums = input().split('-')
temp = 0
for i in range(len(nums)):
    if '+' in nums[i]:
        s = map(int, nums[i].split('+'))
        for j in s:
            temp = temp + j
        nums[i] = temp 
    else:
        nums[i] = int(nums[i])
    temp = 0
result = nums[0]
for i in range(1, len(nums)):
    result = result - nums[i]
print(result)

문제 유형이 그리디알고리즘/ 파싱 이었던 문제인데...

키포인트는 얼마나 효율적인! 방법을 선택해내느냐 아는것이었고

그를 위해서는 '-'를 기준으로 split한다는 아이디어가 중요했다...

exp = input().split("-")

ans = 0

for i in exp[0].split("+"):
    ans += int(i)

for i in exp[1:]:
    for j in i.split("+"):
        ans -= int(j)

print(ans)

이건 훨씬 짧은 코드이다.

나는 일일히 숫자들을 죄다 배열에 넣은 다음 마지막에 다 빼주는식으로 했는데

첫 번째 항에 대해서만 따로 더한뒤에 나머지는 빼주면 더 간결

 

그리고 for i in exp[0].split('+')

이렇게하면 훨씬 코드를 축약할 수 있다는 사실..

배열을 1번째 인덱스부터 하고싶으면 for i in exp[1:]: 로 쓸 수 있다는 것두 알아두자.

728x90

'알고리즘 공부(C++)' 카테고리의 다른 글

백준 3986 좋은 단어  (0) 2022.08.27
백준 18258 큐2  (0) 2022.08.27
4948 베르트랑 공준  (0) 2022.08.26
백준 10814 나이순 정렬  (0) 2022.08.25
2798 블랙잭  (0) 2022.08.24