본문 바로가기
Python

[이취코] 곱하기 혹은 더하기

by Leunco 2022. 2. 9.

출처 : 이것이 취업을 위한 코딩테스트다 with python

 

유형 : 그리디

1. 문제

각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하여 숫자 사이에 '*' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하시오.

단, 일반적인 계산방식과 달리 모든 연산은 왼쪽에서부터 순서대로 이뤄진다고 가정.

 

예시

02894

예시 출력

576

 

2. 내 코드

## 곱하기 혹은 더하기
# 내 코드

str = input()
str = list(str)
opr = []

for i in range(len(str)-1):
    if (str[i] == '0' or str[i+1] == '0'):
        opr.append('+')
    else:
        opr.append('*')

n1 = int(str[0])
n2 = int(str[1])

if opr[0] == '*':
    _sum = n1 * n2
else:
    _sum = n1 + n2

for i in range(2,len(str)):
    n1 = int(str[i])

    if opr[i-1] == '*':
        _sum = _sum * n1
    else:
        _sum = _sum + n1

print(_sum)

 

연산자를 수에 맞게끔 둬야 한다고 생각해서 따로 연산자 리스트를 만들었다. 그래서 따로 만든 연산자 리스트를 원래 숫자 리스트랑 순서대로 계산을 해주었다. 근데 비효율적인 것 같다. 굳이 연산자 리스트를 안 만들어도 되는...

 

3. 풀이

data = input()

result = int(data[0])

for i in range(1,len(data)):
    num = int(data[i])

    if num <= 1 or result <= 1:
        result += num
    else:
        result *= num

print(result)

이 풀이의 핵심은 두수에 대해 연산을 수행할 때, 두 수 중에서 하나라도 1 이하인 경우에는 더하며, 두 수가 모두 2 이상인 경우에는 곱한다는 것이다.

 

 

반응형

'Python' 카테고리의 다른 글

[백준] 18352번 : 특정 거리의 도시 찾기  (0) 2022.02.09
[백준] 1439번 : 뒤집기  (0) 2022.02.09
[이취코] 모험가 길드  (0) 2022.02.09
[백준] 1931번 : 회의실 배정  (0) 2022.02.09
[이취코] 1이 될 때까지  (0) 2022.02.08

댓글