반응형
문제 : 각 자리가 0~9 로만 이루어진 문자열이 주어졌을 때 왼쪽부터 오른쪽까지 차례대로 더하거나 곱해서 가장 큰수가 되게 만들기
사칙연산 방식과는 달리 모든 연산은 왼쪽부터 오른쪽으로 차례대로 진행된다.
예를들어 02984 문자열이 주어지면 ((((0+2)*9)*8)*4) = 576 이다.
이 문제를 풀 때 핵심은 0이나 1이 있을 때 곱하기를 안하고 더하기를 해줘야 한다는점,
그리고 for문을 돌 때 index outof bound가 발생하지 않게끔 해줘야 한다는 점이 제일 중요한거 같다.
두 수를 비교하기 위해서 index, index+1 을 비교하는 방식으로 할까 하다가 out of bound 가 날 수 있으므로, 0번째 인덱스는 미리 갖고 있고 1부터 len(data) 까지 for문을 돌게 하는 방식으로 했다.
처음에 그냥 내가 만들때는 아래와 같이 만들었는데(변수명 a는 참 성의없지만) 답 코드를 보니 a라는 변수를 굳이 둘 필요 없었다.
# 02984 - 576
data = input()
a = int(data[0])
result =0
for i in range(1, len(data)):
num = int(data[i])
if a <= 1 or num <= 1:
result = a+num
print(f"result1: {result}")
else:
result = (a*num)
print(f"result2: {result}")
a = result
print(result)
아래와 같이 하는게 더 깔끔하다.
# 02984 - 576
# 567 - 210
data = input()
result = int(data[0])
for i in range(1, len(data)):
num = int(data[i])
if result <= 1 or num <= 1:
result += num
print(f"result: {result}")
else:
result *= num
print(f"result-else: {result}")
print(result)
문제 출처 : 동빈나 유튭 https://www.youtube.com/watch?v=2zjoKjt97vQ&list=PLRx0vPvlEmdAghTr5mXQxGpHjWqSz0dgC&index=3
반응형
'연습' 카테고리의 다른 글
[그리디] 만들 수 없는 금액 (0) | 2021.10.03 |
---|---|
[그리디] 문자열 뒤집기 (0) | 2021.09.26 |
[그리디] 모험가 길드 (0) | 2021.09.23 |
[그리디] 큰 수의 법칙 (0) | 2021.09.13 |
파이썬 기본문법 정리 (2) | 2021.09.06 |