[Algorithms] 곱하기 혹은 더하기 Review

최현진·2022년 2월 28일
0
# 0 or 1은 더하기, 나머지는 곱하기

s = input()
# print(type(s)) <Class 'str'>
#result = 0
result = int(s[0])
# result가 0이면 이후 곱하기 조건에서 값으로 0이 출력되므로,
# 0 => 전역 변수는 더하기에만 사용 => 순서대로 진행해야하므로 사용 불가
# 다른 방법 => 문자열 인덱스0을 넣고 result 액세스 하자마자 계산식행

def multiply_or_add(s):
    global result
    for i in range(1, len(s)):
    # 'TypeError: string indices must be integers'
        if result == 0 or result == 1 or s[i] == 0 or s[i] == 1:
            result += int(s[i])
            # TypeError: unsupported operand type(s) for +=: 'int' and 'str'
        else:
            result = result * int(s[i])
            #TypeError: can't multiply sequence by non-int of type 'str'
    return print(result)

multiply_or_add(s)

🐥 HYUNJIN's PICK 시사점


1. 시작값 검열

순차적으로 연산하며 마지막에 결과값이라고 부르는 변수는 result라고 정했다. result를 전역 변수로 선언하며 0을 부여했고 테스트 결과값이 0이 나왔다. 이를 통해 result에 0을 부여하면 전역 변수의 첫번째 연산은 무조건 더하기를 넣어야하므로 불필요한 로직을 작성해함을 깨닳았고 숫자로만 이루어진 문자열S의 0번째 숫자를 부여했다.

이후 첫 번째 숫자가 0이 아니고 두 번째 숫자가 0 또는 1이 아닐 때는 곱하기를 하는 것이 가장 큰 수를 구하는 방법이라 판단해 이를 기준으로 로직을 작성했다.


2. 자료형 파악

(입력값 자료형 확인)
입력받은 값의 타입을 프린트했더니 'str' 클래스임을 확인했다. 자연스럽게 string index사용을 떠올릴 수 있었다.

(for문 입력 오류)
하지만, 연산을 시도하자 'TypeError: string indices must be integers'이 출력됐다. for [i] in s로 for문의 파라미터를 잘못넣었다. for문에서는 연속적인 인덱스를 돌리고 아래 조건문에 연속적인 인덱스를 사용해 코드를 작성해야했는데, 나사가 빠져있던 것이다^_ㅠ.

(연산을 위한 자료형 변환)
for문을 정정했으나, 'TypeError: unsupported operand type(s) for +=: 'int' and 'str', TypeError: can't multiply sequence by non-int of type 'str''이 출력됐다. str 값은 연산할 수 없다는 뜻으로 연산이 필요한 srt값들에 int()을 사용해 해결했다.

profile
유연하고 의연하게, 꾸준히

0개의 댓글