본문 바로가기

Algorithm

[백준] 2675번: 문자열 반복

728x90

문제 링크

 

문제

문자열 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를 출력한다.

 

소깡이 풀이

 

import Foundation

let caseCount = Int(readLine()!)!

var resultList: [String] = []

for _ in 0...caseCount-1 {
    let input = readLine()!.split(separator: " ")
    
    let repeatCount = Int(input[0])
    let string = input[1]
    
    let arrayString = Array(string).map { $0 }
    
    var list: [Character] = []
    for item in arrayString {
        for _ in 1...repeatCount! {
            list.append(item)
        }
    }
    
    let result = String(list)
    resultList.append(result)
}

for item in resultList {
    print(item)
}

 

수정하고 싶은 부분

✅ 반복문

(수정중 ..)

 

✅ 반복문 내의 print문 (print문을 한번만 사용할 수는 없는가?)

지난번에도 한번 사용했었는데 .. 오랜만이라서 또 까먹음 ㅋㅋ ..

for item in resultList {
    print(item)
}

print(resultList.joined(separator: "\n"))

for _ in 구문을 아래 joined(separator:)를 사용해서 print문을 한번만 호출해 출력값을 반환할 수 있다.

 

 

 

다른 풀이

repeating을 사용해서 문자열을 반복할 수 있다.

let str = String(repeating: "ㅎ", count: 10)

 

let T = Int(readLine()!)!

(0..<T).forEach { _ in
    let input = readLine()!.split(separator: " ")
    
    let R = Int(input[0])!
    let S = input[1]
    
    S.forEach { s in
        print(String(repeating: s, count: R), terminator: "")
    }
    print() // Test case 별로 구분이 되도록 줄바꿈 
}

 

'Algorithm' 카테고리의 다른 글

[백준] 상수  (0) 2022.09.11
[백준] 1157번: 단어 공부  (0) 2022.09.11
백준 - 1차원 배열  (1) 2022.08.27
백준 - 1110번 (더하기 사이클)  (0) 2022.08.23
백준 - 10951번  (0) 2022.08.23