[이코테] 그리디_곱하기 혹은 더하기 (python)

juyeon·2022년 6월 27일
0

나의 풀이

1. 성공

data = input()
result = 0

for i in range(len(data)):
    if int(data[i]) <= 1 or result <= 1:
        result += int(data[i])
    else:
        result *= int(data[i])
        
print(result)

2. 성공

num = map(int, input()) # 문자열 S 입력
result = 0 # 결과값 = 0으로 초기화

for i in num:
	# 더하려는 수가 0, 1 이거나 기존에 계산된 수가 0, 1인 경우
	if i <= 1 or result <= 1:
		result += i # 더하기
	else:
		result *= i # 곱하기
        
print(result)

: 예전 풀이에 비해 쪼오오금 간소해진 느낌? 처음부터 정수형으로 받기 때문에~ 근데 사실 별 차이는 없다 ㅎㅎ

  • map(int, input())을 하는가?
    : int(input())을 하면 0123 과 같은 0으로 시작하는 숫자는 0을 떼어버리고 정수형으로 변환함.
    그러나 map(int, input())은 input되는 각각을 정수형으로 변환! 이걸 그대로 출력하면 <map object at 0x7fd640956908>과 같은 결과를 얻지만, for문으로 원소 하나씩 출력하면 얻어짐.. why? : 맵 객체(map object)가 만들어지면, 이 상태로는 안에 들어있는 값을 볼 수 없기 때문!

3. 성공

arr = list(map(lambda x: int(x), list(input())))
result = arr[0]
for i in arr[1:]:
    if result < 2 or i < 2:
        result += i 
    else:
        result *= i
print(result)

모범답안

data = input()

#첫 번째 문자를 숫자로 변경하여 대입
result = int(data[0])

for i in range(1, len(data)):
#두 수 중에서 하나라도 '0' 혹은 '1'인 경우, 곱하기보다는 더하기 수행
	num = int(data[i])
    if num <= 1 or result <= 1:
        result += num
    else:
        result *= num
        
print(result)

: 첫 시작을 아무것도 더하지 않은 0으로 설정한 나에 비해, 모범답안은 아예 첫 시작을 자료의 첫번째 수로 함으로써 for문이 한번이라도 덜 돌아가게 했다..!

profile
내 인생의 주연

0개의 댓글