본문 바로가기
연습

[그리디] 곱하기 혹은 더하기

by ybs 2021. 9. 6.
반응형

문제 : 각 자리가 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