실패 | 시도 - 번
1541 : [그리디 알고리즘] 잃어버린 괄호(py)
문제 설명
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
문제 분석
- 마이너스(-)를 기준으로 계산식을 쪼갠 후, 플러스(+)인 것만 먼저 계산하고 나머지는 뺄셈 계산으로 해주면 된다.
- 모두 뺄셈 : 괄호 필요없음
- 모두 덧셈 : 괄호 필요없음
- 뺄셈, 덧셈 : 덧셈을 먼저 계산하고 빼는 것이 좋음
- 덧셈, 뺄셈 : 괄호 필요없음
예) '55 - 50 + 40' → '55', '50 + 40' → '55', 90 → -35
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
입력과 출력 예시
입력 | 출력 |
55-50+40 | -35 |
10+20+30+40 | 100 |
00009-00009 | 0 |
Trial
- 처음에는 eval() 함수를 사용하였다. 다른 계산식은 잘 작동했지만 문제는 '00009-00009'에서 Syntax Error가 발생했다. 그래서 다른 방식으로 다시 코딩하게 되었다.
n = input().split('-')
result = eval(n[0])
for i in n[1:]:
result -= eval(i)
print(result)
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
내 소스
- 첫시도 : 실패 (구현 실패)
n = input().split('-')
for i in range(len(n)):
if i == 0:
result = sum(list(map(int, n[i].split('+'))))
continue
l = list(map(int, n[i].split('+')))
result -= sum(l)
print(result)
소스 설명
n = input().split('-')
[1] : '-' 기호를 기준으로 문자열을 쪼갠다.
for i in range(len(n)):
if i == 0:
result = sum(list(map(int, n[i].split('+'))))
continue
l = list(map(int, n[i].split('+')))
result -= sum(l)
[2 - 7] : 첫번째 원소를 '+' 기호로 쪼갠 후, int형으로 변환해주고 리스트의 모든 원소의 덧셈을 구해 result에 저장한다. 다른 원소들도 '+' 기호로 쪼개고 int형으로 변환하여 덧셈한 값을 구하여 result에서 뺀다.
→ 기호와 숫자가 섞여있어서 식이 좀 복잡해졌지만 결론은 덧셈이 있는 부분은 계산해주고 나머지 부분은 뺄셈으로 처리한 것이다.
다른 코드 분석
- 다른 분들은 여러 for문을 사용하여 작성하셨다. 그런데 나는 for문을 쓰기 싫어서 함수 사용과 형변환을 많이 하게 되었다. 스타일의 차이인 것 같다.
Ref.
1. 문제 풀이 / https://sungmin-joo.tistory.com/67
2. 문제 풀이 / https://pacific-ocean.tistory.com/228
3. 문제 풀이 / https://sodehdt-ldkt.tistory.com/49
* 잘못된 부분에 대해 댓글 남겨주시면 감사하겠습니다! 😀
'코딩테스트' 카테고리의 다른 글
[코테/백준] Python 로프 - 2217번 (0) | 2023.02.04 |
---|---|
[코테/백준] Python 거스름돈 - 5585번 (0) | 2023.02.04 |
[코테/백준] Python 보물 - 1026번 (0) | 2023.02.03 |
[코테/백준] Python 동전 0 - 11047번 (0) | 2023.02.02 |
[코테/백준] Python 회의실 배정 - 1931번 (실패) (0) | 2023.01.31 |
실패 | 시도 - 번
1541 : [그리디 알고리즘] 잃어버린 괄호(py)
문제 설명
세준이는 양수와 +, -, 그리고 괄호를 가지고 식을 만들었다. 그리고 나서 세준이는 괄호를 모두 지웠다.
그리고 나서 세준이는 괄호를 적절히 쳐서 이 식의 값을 최소로 만들려고 한다.
괄호를 적절히 쳐서 이 식의 값을 최소로 만드는 프로그램을 작성하시오.
문제 분석
- 마이너스(-)를 기준으로 계산식을 쪼갠 후, 플러스(+)인 것만 먼저 계산하고 나머지는 뺄셈 계산으로 해주면 된다.
- 모두 뺄셈 : 괄호 필요없음
- 모두 덧셈 : 괄호 필요없음
- 뺄셈, 덧셈 : 덧셈을 먼저 계산하고 빼는 것이 좋음
- 덧셈, 뺄셈 : 괄호 필요없음
예) '55 - 50 + 40' → '55', '50 + 40' → '55', 90 → -35
입력
첫째 줄에 식이 주어진다. 식은 ‘0’~‘9’, ‘+’, 그리고 ‘-’만으로 이루어져 있고, 가장 처음과 마지막 문자는 숫자이다. 그리고 연속해서 두 개 이상의 연산자가 나타나지 않고, 5자리보다 많이 연속되는 숫자는 없다. 수는 0으로 시작할 수 있다. 입력으로 주어지는 식의 길이는 50보다 작거나 같다.
출력
첫째 줄에 정답을 출력한다.
입력과 출력 예시
입력 | 출력 |
55-50+40 | -35 |
10+20+30+40 | 100 |
00009-00009 | 0 |
Trial
- 처음에는 eval() 함수를 사용하였다. 다른 계산식은 잘 작동했지만 문제는 '00009-00009'에서 Syntax Error가 발생했다. 그래서 다른 방식으로 다시 코딩하게 되었다.
n = input().split('-')
result = eval(n[0])
for i in n[1:]:
result -= eval(i)
print(result)
SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers
내 소스
- 첫시도 : 실패 (구현 실패)
n = input().split('-')
for i in range(len(n)):
if i == 0:
result = sum(list(map(int, n[i].split('+'))))
continue
l = list(map(int, n[i].split('+')))
result -= sum(l)
print(result)
소스 설명
n = input().split('-')
[1] : '-' 기호를 기준으로 문자열을 쪼갠다.
for i in range(len(n)):
if i == 0:
result = sum(list(map(int, n[i].split('+'))))
continue
l = list(map(int, n[i].split('+')))
result -= sum(l)
[2 - 7] : 첫번째 원소를 '+' 기호로 쪼갠 후, int형으로 변환해주고 리스트의 모든 원소의 덧셈을 구해 result에 저장한다. 다른 원소들도 '+' 기호로 쪼개고 int형으로 변환하여 덧셈한 값을 구하여 result에서 뺀다.
→ 기호와 숫자가 섞여있어서 식이 좀 복잡해졌지만 결론은 덧셈이 있는 부분은 계산해주고 나머지 부분은 뺄셈으로 처리한 것이다.
다른 코드 분석
- 다른 분들은 여러 for문을 사용하여 작성하셨다. 그런데 나는 for문을 쓰기 싫어서 함수 사용과 형변환을 많이 하게 되었다. 스타일의 차이인 것 같다.
Ref.
1. 문제 풀이 / https://sungmin-joo.tistory.com/67
2. 문제 풀이 / https://pacific-ocean.tistory.com/228
3. 문제 풀이 / https://sodehdt-ldkt.tistory.com/49
* 잘못된 부분에 대해 댓글 남겨주시면 감사하겠습니다! 😀
'코딩테스트' 카테고리의 다른 글
[코테/백준] Python 로프 - 2217번 (0) | 2023.02.04 |
---|---|
[코테/백준] Python 거스름돈 - 5585번 (0) | 2023.02.04 |
[코테/백준] Python 보물 - 1026번 (0) | 2023.02.03 |
[코테/백준] Python 동전 0 - 11047번 (0) | 2023.02.02 |
[코테/백준] Python 회의실 배정 - 1931번 (실패) (0) | 2023.01.31 |