Lumpy Space Princess - Adventure Time
코딩테스트/백준

백준 [1541] - 잃어버린 괄호

yaebb_82 2023. 2. 7.

 

 

 

문제

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

 

 

아이디어

ex) 식이 55 + 50 - 40 + 55 -30 일 때,

 

    [공통 아이디어]

    : (55 + 50) - (40 + 55) - 30 으로 생각하면 된다.  → '-' 기준으로 나눈다 가 먼저!

 

    [내가 생각한 방법]

    1)-를 기준으로 나눠서 +연산들을 다 하고

    2)+연산한 값들을 다시 다 빼주면  최소값이 나온다!

    → 55+50, 40+55, 30 으로 나눠서, +있는 것들 먼저 계산

    → 105, 95, 30 을 다 빼주기

    → 105 - 95 - 30 = 10 - 30 = -20

 

    [최적의 방법]

    1) -를 기준으로 나누되, 처음 나눠진 것만 +연산들을 해주고,

    2) 나머지 뒤에 있는 것들은 어짜피 빼줄 값들이기 때문에, 다 -로 계산해주면 → 최소값이 나온다!

    → 55+50, 40+55, 30 으로 나눠서, 제일 첫 번째 것만 먼저 + 계산

    → 105, 40+55, 30 첫 번째 뒤에 있는 것들은 다 빼주기 (+가 있다면, +기준으로 나눠서 각각 빼주기)

    → 105 - 40 - 55 - 30 = -20

 

 

 

작성한 코드

sub_nums = input().split('-')
minus_nums = list()

for i in sub_nums:
    plus_value = 0
  
    for j in i.split('+'):
        plus_value += int(j)

    minus_nums.append(plus_value)

result = minus_nums[0]
for k in minus_nums[1:]:
    result -= k

print(result)

- '-'을 기준으로 입력한 값을 나눠서 리스트로 만들어진 것을 sub_nums에 저장한다.

- 뺄 값들만 저장할 리스트인 minus_nums를 선언한다.

- sub_nums 안에 있는 값들을 i에 담아 하나씩 꺼내서 비교한다.

- i를 '+' 기준으로 나눠서 리스트로 만들어 for문을 돌려 하나씩 꺼내 j에 저장하여 비교하는데, j의 값을 int형으로 형변환 하여 plus_value에 더한다.

- minus_nums에 덧셈을 마친 plus_value의 값을 append()로 추가한다.

- 뺄 값들만 저장한 리스트인 minus_nums의 0번째 원소를 result 변수에 저장한다.

- minus_nums 1번째 원소부터 끝까지 for문을 돌리면서 '-'연산을 진행한다.

- 최종적으로 뺄셈을 마친 result의 값을 print()로 출력한다.

 

 

 

cf.) 더 나은 코드

sub_nums = input().split('-')
sum = 0

for i in sub_nums[0].split('+'):
    sum += int(i)

for j in sub_nums[1:]:
    for k in j.split('+'):
        sum -= int(k)

print(sum)

- 위의 아이디어를 바탕으로 작성된 코드이다.

- 제일 먼저 '-'를 기준으로 나눠주는 아이디어는 똑같았다.

- 최초로 '-' 연산자가 나오기 전까지의 식 == 0번째 이기 때문에, 0번째의 식을 먼저 '+'계산해준다.

- 그 다음 1번째 부터 끝까지 for문을 돌려 -계산을 해주되, 만약 '+'가 포함된 식이라면, +를 기준으로 나눠준 뒤 '-'계산을 해준다.

   (1번째 부터 끝까지의 숫자들은 다 '-' 해주면 된다.)

 

 

 

반응형

'코딩테스트 > 백준' 카테고리의 다른 글

백준[2798] - 블랙잭  (0) 2023.02.11
백준 [13305] - 주유소  (0) 2023.02.10
백준 [11399] - ATM  (0) 2023.02.07
백준 [1931] - 회의실 배정  (0) 2023.02.02
백준 [11047] - 동전 0  (0) 2023.02.02

댓글