곱하기 혹은 더하기

Yona·2022년 1월 5일
0

문제

  • 시간 복잡도
    • 1초
  • 입력
    • 첫째줄에 여러개의 숫자로 구성된 하나의 문자열 S가 주어짐
    • 1<=S의길이<=20
    • 예시) 02984
  • 출력
    • 첫째줄에 만들어질 수 있는 가장 큰 수 출력

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

단 , +보다 X를 먼저 계산하는 일반적인 방식과 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어집니다.


풀이

풀이 아이디어

X이 +보다 더 큰 수를 만든다.
다만, 두 수 중 하나라도 0이나 1일 경우, 곱하기보다는 더하기를 수행하는 것이 더 큰 수를 만든다.
참고로 음수는 반대임.

결론적으로

  • 두 수 중 하나라도 1이하 -> 더하기
  • 두 수 모두 2 이상인 경우 -> 곱하기

시간복잡도 계산

  • S의 길이만큼 반복한다.
    • O(S)
    • 1<=S의길이<=20 이므로, 완전 안전

풀이 코드

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)
profile
Sometimes you win, sometimes you learn 🏃‍♀️

0개의 댓글