[JS] Q02 곱하기 혹은 더하기

Hadam Cho·2021년 4월 4일
1

Algorithm

목록 보기
2/32
post-thumbnail

제한 사항

난이도풀이 시간시간 제한메모리 제한
130분1초128MB

문제

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

예를 들어 02984라는 문자열이 주어지면, 만들어질 수 있는 가장 큰 수는 ((((0 + 2) × 9) × 8) × 4) = 576입니다. 또한 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어집니다.


입력 조건

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

출력 조건

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

입력 예시 1

02984

출력 예시 1

576


입력 예시 2

567

출력 예시 2

210


소스 코드

처음 답안

function solution(S) {
  let result = Number(S[0]);	// 첫 번째 숫자 대입
  
  for (let i = 1; i < S.length; i++) {	// 두 번째 숫자부터 마지막 숫자까지
    const num = Number(S[i]);	// 문자열을 숫자로 형변환
    if (result === 0) {	// 지금까지의 연산 결과가 0이라면
      result += num;	// 더하기로 연산
    } else {	// 지금까지의 연산 결과가 0이 아니라면
      result *= num;	// 곱하기로 연산
    }
  }
  
  console.log(result);	// 결과 출력
}

정답을 본 뒤 답안

function solution(S) {
  let result = Number(S[0]);	// 첫 번째 숫자 대입
  
  for (let i = 1; i < S.length; i++) {	// 두 번째 숫자부터 마지막 숫자까지
    const num = Number(S[i]);	// 문자열을 숫자로 형변환
    // 지금까지의 연산 결과가 0 혹은 1, 연산을 수행할 숫자가 0 혹은 1일 경우
    if (result <= 1 || num <= 1) {
      result += num;	// 더하기로 연산
    } else {	// 아니라면
      result *= num;	// 곱하기로 연산
    }
  }
  
  console.log(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뿐만 아니라 1도 더하기 연산을 수행하는 것이 효율적이라는 것을 알게 되었다. 또한 조건문을 작성할 때 1과 0을 각각 비교하는 것이 아닌, 1 이하의 수로 확인할 수 있다는 것도 깨닫게 되었다. 이 문제도 정답을 참고했기 때문에 다시 한번 풀어봐야겠다.

profile
(。・∀・)ノ゙

0개의 댓글