반복문 유형에서는 반복 횟수와 관련이 있는 테스트 케이스의 개수를 입력받는 유형이 꽤 있었다.
기존 유형에서는 아래와 같이 예제 입력을 받아
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n')
첫번째 예제 입력은 input[0], 두번째 예제 입력은 input[1], ...과 같이 처리하였으나
테스트 케이스의 개수를 입력받는 유형에서는 input[0]이 테스트 케이스가 되므로 예제 입력을 처리하는 방법도 달라진다.
원래는 예제 입력을 input[1], input[2], ...부터 처리하는 방식으로 풀이하였다.
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n')
const T = Number(input[0])
for (let i = 1; i <= T; i++) {
const numbers = input[i].split(' ').map(Number)
console.log(numbers[0]+numbers[1])
}
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n')
const T = Number(input[0])
let output = ''
for(let i = 1; i <= T; i++) {
const [a, b] = input[i].split(' ').map(Number)
i !== T ? output += `${a+b}\n` : output +=`${a+b}`
}
console.log(output)
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n')
const X = Number(input[0])
const N = Number(input[1])
let total = 0
for (let i = 2; i < 2 + N; i++) {
const [price, quantity] = input[i].split(' ').map(Number)
total += price * quantity
}
total === X ? console.log('Yes') : console.log('No')
그러나 나머지 매개변수를 사용하면 테스트 케이스의 개수 입력 여부와 상관없이
동일한 방법으로 예제 입력을 처리할 수 있게 된다.
백준 10950번
let [T, ...input] = require('fs').readFileSync('/dev/stdin').toString().split('\n')
for (let i = 0; i < T; i++) {
const numbers = input[i].split(' ').map(Number)
console.log(numbers[0]+numbers[1])
}
백준 15552번
let [T, ...input] = require('fs').readFileSync('/dev/stdin').toString().split('\n')
let output = ''
input.forEach((value, index) => {
const [a, b] = value.split(' ').map(Number)
index !== T-1 ? output += `${a+b}\n` : output +=`${a+b}`
})
console.log(output)
* 다른 문제에서도 forEach 메소드 이용해서 많이 풀어보려고 하는데 자꾸 틀렸다고 한다. 하지만 왜 틀렸다는 건지는 모르겠다.
더보기
더보기
index !== T-1 ? output += `${a+b}\n` : output +=`${a+b}`
위 부분은 마지막 출력에서 \n를 생략하기 위한 것으로, 다음과 같은 풀이로 더 간략하게 처리할 수 있다.
let input = require('fs').readFileSync('/dev/stdin').toString().split('\n')
const T = Number(input[0])
let output = ''
for (let i = 1; i <= T; i++) {
const [a, b] = input[i].split(' ').map(Number)
output += `${a+b}\n`
}
console.log(output.trim())
백준 25304번
let [X, N, ...input] = require('fs').readFileSync('/dev/stdin').toString().split('\n')
X = Number(X)
N = Number(N)
let total = 0
for (let i = 0; i < N; i++) {
total += input[i].split(' ').map(Number)[0] * input[i].split(' ').map(Number)[1]
}
total === X ? console.log('Yes') : console.log('No')
개인적으로는 나머지 매개변수를 사용했을 때가 실제 예제 입력들을 처리하기에는 더 쉬웠는데
실행 속도에 있어서는 기존 풀이 방법이 더 나은 것 같기도 하다.
참고) 함수 ① 함수 기본
💫 이 문제를 통해 배운 것
테스트 케이스의 개수를 입력받는 유형에서는 나머지 매개변수를 이용하여 실제 예제 입력들로만 이루어진 배열을 입력받을 수 있다.