✏️기록하는 즐거움
article thumbnail

Link

 

2675번: 문자열 반복

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다

www.acmicpc.net

문제

문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오.
즉, 첫 번째 문자를 R번 반복하고, 두 번째 문자를 R번 반복하는 식으로 P를 만들면 된다.
S에는 QR Code "alphanumeric" 문자만 들어있다.QR Code "alphanumeric" 문자는 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ\$%*+-./: 이다.

입력 > 첫째 줄에 테스트 케이스의 개수 T(1 ≤ T ≤ 1,000)가 주어진다. 각 테스트 케이스는 반복 횟수 R(1 ≤ R ≤ 8), 문자열 S가 공백으로 구분되어 주어진다. S의 길이는 적어도 1이며, 20글자를 넘지 않는다. 
출력 > 각 테스트 케이스에 대해 P를 출력한다.

| 예제 입력

2
3 ABC
5 /HTP

| 예제 출력

AAABBBCCC
/////HHHHHTTTTTPPPPP

 

제출

1)

const input = (
  process.platform === "linux"
    ? require("fs").readFileSync("/dev/stdin").toString()
    : `2
      3 ABC
      5 /HTP`
).split("\n");

const T = input[0];
let answer = "";

for (let i = 1; i <= T; i++) {
  let R = input[i].trim()[0];
  let [...S] = input[i].trim().split(" ")[1];

  answer += `${S.map((item) => item.repeat(R)).join("")}\n`;
}

console.log(answer);

 

2) 구조분해 할당과 for문을 하나 더 사용하여 시간 단축하기

const input = (
  process.platform === "linux"
    ? require("fs").readFileSync("/dev/stdin").toString()
    : `2
      3 ABC
      5 /HTP`
).split("\n");

const T = input[0];

for (let i = 1; i <= T; i++) {
  let answer = "";
  let [R, S] = input[i].trim().split(" ");

  for (let j = 0; j < S.length; j++) {
    answer += S[j].repeat(R);
  }
  console.log(answer);
}

 

 

풀이과정

입력받은 문자열을 S의 배열 요소로 저장한 후, repeat 메소드를 사용하여 각 문자열을 반복한 뒤 join으로 합쳐준다.

구조분해할당과 for문을 활용하면 map을 사용하지 않고 구현할 수 있다.

 

 

개념

repeat()

  • 문자열을 주어진 횟수만큼 반복해서 이어붙인 새 문자열을 반환한다.
  • 반복 횟수는 양의 정수여야하고, 최대 문자열 크기를 넘어서면 안된다.

Comment

 

profile

✏️기록하는 즐거움

@nor_coding

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!