본문 바로가기
개발/코딩테스트

[Python] 이것이 코딩테스트다 with 파이썬 - 곱하기 혹은 더하기 - 그리디 알고리즘

by seopport 2023. 3. 11.
728x90
반응형

해당 문제 및 해설은 "이것이 코딩테스트 다 with 파이썬" 책을 기준으로 요약 및 정리하여 작성하였습니다.

 

이것은 코딩테스트다 with 파이썬 구입처

 

이것이 취업을 위한 코딩 테스트다 with 파이썬 - YES24

나동빈 저자의 유튜브 라이브 방송 https://www.youtube.com/c/dongbinnaIT 취준생이라면 누구나 입사하고 싶은 카카오 · 삼성전자 · 네이버 · 라인!취업의 성공 열쇠는 알고리즘 인터뷰에 있다!IT 취준생

www.yes24.com


 

문제

각 자리가 숫자(0부터 9) 로만 이루어진 문자열 S 가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 ' X ' 혹은 ' + ' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요. 단 + 보다 X 를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.

 

예를 들어 02984 라는 문자열이 주어지면, 만들어질 수 있는 가장 큰 수는 ((((0 + 2) X 9 ) X 8) X 4 ) = 576 입니다.

 

입력조건

첫째 줄에 여러 개의 숫자로 구성된 하나의 문자열 S 가 주어집니다. ( 1 ≤ S 의 길이 ≤ 20 )

 

출력조건

첫째 줄에 만들어질 수 있는 가장 큰 수를 출력합니다.

 

입력 예시 1 출력 예시 1
02984 576

 

입력 예시 2 출력 예시 2
567 210

 

내 코드 - 테스트 케이스 통과

data = list(map(int, input()))
sum = data[0]
for i in range(1, len(data)):
    # 맨 처음 시작이 0인 경우를 제외한다.
    if sum == 0:
      sum += data[i]
      continue

    # 0이랑 1인 경우에만 더하기
    if data[i] <= 1:
      sum += data[i]
    # 나머지 곱하기
    else:
      sum *= data[i]
print(sum)

 

정답 코드 -  통과

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)

 

728x90
반응형