은세고화
뚜렷한 기억보단 흐릿한 잉크를
은세고화
전체 방문자
오늘
어제
  • 분류 전체보기 (95)
    • TDD (2)
      • 학점 산출 프로그램 (2)
    • IT (43)
      • 부스트코스 (18)
      • CS50 (3)
      • 도서추천 알고리즘 (2)
      • 스터디 일정 (3)
      • 스프링 (3)
      • 프로젝트 개발 중 발생한 에러 (8)
      • 웹개발 (3)
      • DB (3)
    • 독서 후기 (12)
      • 도서 (12)
    • e북 (3)
    • 알고리즘 (26)
    • 프로젝트 (6)
      • 향수 (6)
    • 회고 (1)

블로그 메뉴

  • 홈

공지사항

인기 글

티스토리

hELLO · Designed By 정상우.
글쓰기 / 관리자
은세고화

뚜렷한 기억보단 흐릿한 잉크를

알고리즘

백준 1541 파이썬

2021. 11. 18. 14:49
반응형

https://www.acmicpc.net/problem/1541

 

1541번: 잃어버린 괄호

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

www.acmicpc.net

 

-앞의 숫자는 다 더하고 -뒤의 숫자만 괄호를 치면 된다. 시키는 대로 괄호를 추가한 뒤 파이썬의 eval함수를 통해 입력받은 문자열을 자동으로 연산하도록 프로그램을 짰다.

 

앞에 0이 붙은 경우 eval함수가 작동하지 않아서 int로 변환하는 작업을 했다.

 

n = input()

num_list = []
s = ''
for i in n:
    if i.isdigit():
        s += i
    else:
        num_list.append(str(int(s)))
        num_list.append(i)
        s = ''
num_list.append(str(int(s)))

check = False
for i in range(len(num_list)):
    if num_list[i] == '-':
        if check:
            num_list.insert(i, ')')
        num_list.insert(i+1, '(')
        check = True

if check:
    num_list.append(')')

print(eval(''.join(num_list)))

 

돌려보니 TypeError가 발생했다. 어떤 부분이 원인인지 알 수 없어서 다른 방식을 참고했다.

-의 앞에 있는 값은 모두 더한 후 그 값에 -뒤에 있는 값을 빼주면 된다.

split을 사용하면 isdigit()과 빈 문자열로 일일이 숫자를 만들지 않아도 된다.

 

n = input().split('-')
result = 0
for i in n[0].split('+'):
    result += int(i)
for i in n[1:]:
    for j in i.split('+'):
        result -= int(j)
print(result)
반응형
저작자표시 (새창열림)

'알고리즘' 카테고리의 다른 글

백준 2636 치즈 자바  (0) 2022.03.05
백준 3085 파이썬  (0) 2021.11.23
백준 1931 파이썬  (0) 2021.11.17
백준 13305 주유소 파이썬  (0) 2021.11.17
백준 1449 파이썬  (0) 2021.11.17
    '알고리즘' 카테고리의 다른 글
    • 백준 2636 치즈 자바
    • 백준 3085 파이썬
    • 백준 1931 파이썬
    • 백준 13305 주유소 파이썬
    은세고화
    은세고화

    티스토리툴바