백준 2675번을 풀어보았다.
let [T, ...input] = require('fs').readFileSync('/dev/stdin').toString().split('\n').map((value) => value.trim())
input = input.map((value) => value.split(" "))
let output = ''
for (let i = 0; i < T; i++) {
const [R, S] = input[i]
for (let j = 0; j < S.length; j++) {
for (let k = 0; k < R; k++) {
output += S[j]
}
}
i != T - 1 ? output += '\n' : output += ''
}
console.log(output)
정답을 출력해내기는 하지만 for 문을 3번이나 중첩하였다.
이때 repeat 메소드와 map 메소드를 사용하면 for 문 중첩 횟수를 줄일 수 있다.
참고) 백준 25314번
1. repeat 메소드
let [T, ...input] = require('fs').readFileSync('example.txt').toString().split('\n').map((value) => value.trim())
input = input.map((value) => value.split(" "))
let output = ''
for (let i = 0; i < T; i++) {
const [R, S] = input[i]
for (let j = 0; j < S.length; j++) {
output += S[j].repeat(R)
}
i != T - 1 ? output += '\n' : output += ''
}
console.log(output)
각 문자를 R번 반복하는 세번째 for 문을 repeat 메소드로 대신하였다.
2. map, repeat 메소드
let [T, ...input] = require('fs').readFileSync('example.txt').toString().split('\n').map((value) => value.trim())
input = input.map((value) => value.split(" "))
let output = ''
for (let i = 0; i < T; i++) {
const [R, S] = input[i]
S.split('').map((value) => output += value.repeat(R))
i != T - 1 ? output += '\n' : output += ''
}
console.log(output)
두번째 for 문은 문자열 내 문자를 순차적으로 선택하는 역할을 한다는 점에서
배열 내 원소를 순차적으로 선택하여 콜백함수를 적용하는 map 메소드로 대신할 수 있다.*
이때 콜백함수로 repeat(R)을 사용하면 각 문자를 R번 반복하는 세번째 for 문도 대신할 수 있다.
* 단, map 메소드는 Array 객체 메소드라는 점에서 map 메소드 사용 전 S.split('')으로 문자열을 배열로 변환해주어야 한다.
💫 이 문제를 통해 배운 것
repeat 메소드는 문자 또는 문자열을 특정 횟수만큼 반복한다.