본문 바로가기
Algorithm/Baekjoon

백준 2675번

by minhi 2024. 11. 8.

백준 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 메소드는 문자 또는 문자열을 특정 횟수만큼 반복한다.

'Algorithm > Baekjoon' 카테고리의 다른 글

백준 25083번  (0) 2024.11.14
백준 1152번  (0) 2024.11.08
백준 10809번  (0) 2024.11.08
백준 11720번  (1) 2024.11.08
백준 2743번, 9086번  (0) 2024.10.31