백준 10952번을 풀어보았다.
이러한 형태의 조건의 경우 for문보다는 while문을 쓰는 것이 더 적절하지만
while문 풀이가 바로 생각나지 않아 먼저 for문을 사용해 풀어보았다.
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n')
let output = ''
for (let i = 0; i < input.length; i++) {
const [a, b] = input[i].split(' ').map(Number)
if (a === 0 && b === 0) break
output += `${a+b}\n`
}
console.log(output.trim())
그러나 이 풀이는 다음의 미흡한 부분이 있다.
- 반복 종료가 0 0 입력으로 이루어진다는 조건을 사용하지 않고 반복 종료의 조건을 i === input.length로 설정한 것
- a === 0 && b === 0으로 조건을 활용하는 듯 보이나, 사실 이는 i < input.length - 1로 수정함으로써 대체할 수 있다는 것
즉, for문으로는 input의 길이를 반복 종료의 조건으로 설정하는 것이 더 자연스럽고
따라서 주어진 조건을 제대로 활용할 수 없다.
while문을 사용한 풀이는 다음과 같다.
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n')
let output = ''
let i = 0
while (input[i] !== '0 0') {
const [a, b] = input[i].split(' ').map(Number)
output += `${a+b}\n`
i += 1
}
console.log(output.trim())
이때까지 input[i]를 공백으로 나눈 뒤 각각 처리한 적이 많았다보니
while의 조건문도 각각이 모두 0이 아닌 경우로 세울 생각만 했지 input[i] 자체로 조건문을 세울 생각은 못 했다.
💫 이 문제를 통해 배운 것
input[i]는 '0 0'과 같은 형태의 문자열 자료형으로, 때로는 input[i] 자체로 바라보는 시각이 필요하다.