728x90
반응형
SMALL
한 문제 푸는데 드는 시간이 왜 자꾸 늘어나는지..
간단하게 생각하면 되는데 복잡하게 생각하게 되는 것 같다..
풀이 1
var result = Array(repeating: Array(repeating: "", count: 15), count: 5)
for i in 0...4 {
var word = readLine()!.map { String($0) }
var lastIndexOfWord = word.count
result[i].replaceSubrange(0..<lastIndexOfWord, with: word)
}
for i in 0..<15 {
for j in 0...4 {
print(result[j][i], terminator: "")
}
}
- 최대값을 가진 배열을 생성하고
- 단어의 길이만큼 replaceSubrange로 바꿔준다.
- 어차피 ""는 출력되지 않으니 그대로 모든 result를 출력한다.
풀이 2
var rows: [[String]] = []
var maxCount = 0
for _ in 0...4 {
var row = readLine()!.split(separator: "").map { String($0) }
print(row)
rows.append(row)
if row.count > maxCount { maxCount = row.count }
}
var result: [String?] = []
// j 는 행 수
// i 는 최대 열 수
for i in 0..<maxCount {
for j in 0..<rows.count {
if i >= rows[j].count {
result.append(nil)
} else {
result.append(rows[j][i])
}
}
}
print(result.compactMap { $0 }.joined())
- 이건 내가 푼 방법인데, xCode에서는 돌아가는데, 정답 제출에서는 컴파일에러가 걸렸다.
캐스팅에러 같은데, 버전이 올라가면서 캐스팅 보장이 되는데 반영이 안된것 같다. (혹시 틀렸으면 알려주세요!) - 최대값을 생성하지 않고 갯수만큼만 반복을 도는 방법이다.
회고
- 이 문제의 포인트는 result[i] 를 maxCount만큼 반복하는 것 같았다.
- 기존 2차 배열에서 모든 요소를 도는 방식은 [행][열]방식으로 순차적으로 행의 열을 조회했지만
여기서는, 열을 행만큼 반복해서 모든 요소를 새로로 조회하고, maxCount만큼 반복하는 방식이다. - 첫 번째 풀이가 더 적절하고 의도에 맞는 풀이 같기는 한데, 풀이 2 를 고민하면서 새로읽기 방식을 이해해서 성과는 있었다.
728x90
반응형
LIST
'Algorithm' 카테고리의 다른 글
[Algorithm] Swift 백준 2566 - Flatmap , 2차원 배열 나열하기 (2) | 2023.11.21 |
---|---|
[Algorithm] 백준 2738번 : 이차원 배열 더하기 (0) | 2023.11.10 |
[Algorithm] Swift 백준 2675번 : joined() (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 |