난이도 | 풀이 시간 | 시간 제한 | 메모리 제한 |
---|---|---|---|
1 | 30분 | 1초 | 128MB |
각 자리가 숫자(0부터 9)로만 이루어진 문자열 S가 주어졌을 때, 왼쪽부터 오른쪽으로 하나씩 모든 숫자를 확인하며 숫자 사이에 '×' 혹은 '+' 연산자를 넣어 결과적으로 만들어질 수 있는 가장 큰 수를 구하는 프로그램을 작성하세요. 단, +보다 ×를 먼저 계산하는 일반적인 방식과는 달리, 모든 연산은 왼쪽에서부터 순서대로 이루어진다고 가정합니다.
예를 들어 02984라는 문자열이 주어지면, 만들어질 수 있는 가장 큰 수는 ((((0 + 2) × 9) × 8) × 4) = 576입니다. 또한 만들어질 수 있는 가장 큰 수는 항상 20억 이하의 정수가 되도록 입력이 주어집니다.
02984
576
567
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 이하의 수로 확인할 수 있다는 것도 깨닫게 되었다. 이 문제도 정답을 참고했기 때문에 다시 한번 풀어봐야겠다.