728x90
반응형
SMALL
지난 문제에서 문자열에 반복문을 돌리면 한 글자씩 가져 올 수 있다는 걸 알았으니까 그걸 응용해본 문제이다.
풀이 1
let count = Int(readLine()!)!
var result: [String] = [""]
for i in 0..<count {
let input = readLine()!.split(separator: " ").map { String($0) }
input[1].forEach {
var ch = String($0)
for _ in 0..<Int(input[0])! - 1 {
ch.append(String($0))
}
if result.count != i + 1 {
result.append("")
}
result[i] += ch
}
}
result.forEach {
print($0)
}
솔직히 무지성 코딩 해도 풀 수는 있었다. 하지만.. 풀면서도 느껴지는
이건 아니야.. 하는 느낌적인 느낌.
더 깔끔하게 짤 수 있다.
두 가지 포인트를 고민해보면
1. for문을 map으로만 사용해도 훨씬 짧아질 수 있다
2. 굳이 어딘가에 값을 넣지 않고 바로 출력한다.
풀이 2
let count = Int(readLine()!)!
for _ in 0..<count {
let input = readLine()!.split(separator: " ").map { String($0) }
print(input[1].map{ String(repeating: $0, count: Int(input[0])!) }.joined())
}
문자열을 슬라이스(Character)해서 다시 String으로 캐스팅한다음 input[0]번 만큼 반복해준다.
그럼 예컨데, ["AAA", "BBB", "CCC"] 와 같은 배열이 map으로 인해 생겨난다.
이걸 joined() 하고 바로 print 해준다!
joined()
joined()는 위 문서와 같이
시퀀스의 요소를 연결하고 각 요소 사이에 지정된 구분 기호를 추가하여 새 문자열을 반환한다.
예시를 들자면 아래와 같다.
이런 메소드들에 익숙해지는 것이 더 간결한 코드를 짜는데 도움이 되는 것 같다.
반응형
728x90
반응형
LIST
'Algorithm' 카테고리의 다른 글
[Algorithm] Swift 백준 2566 - Flatmap , 2차원 배열 나열하기 (2) | 2023.11.21 |
---|---|
[Algorithm] 백준 2738번 : 이차원 배열 더하기 (0) | 2023.11.10 |
[Algorithm] 백준 10809 알파벳 찾기/ Char to ASCII in Swift (0) | 2023.11.09 |
[Algorithm] 백준 11720번, error: cannot convert value of type 'String' to expected argument type 'String.Element' (aka 'Character'), (0) | 2023.11.09 |
[Algorithm] Swift ASCII 출력하기 (0) | 2023.11.09 |