머리말
문제 링크
이 문제를 선택한 이유
- 낯선 문제를 접했을 떄 적절한 반복문과 조건문을 사용하기 위함
- 구현 문제 연습
풀이
- 이 문제의 핵심은 배열의 인덱스가 초과할 때, 얼마만큼 처음의 인덱스로 돌아가서 인덱스를 구하는지이다.
- 나머지 연산자를 활용하여 배열의 길이만큼을 나눈 나머지를 구해 인덱스 초과를 방지한다
// 입력
var input = readLine()!.split(separator: " ").map { Int($0)! }
// n, k 할당
let n = input[0] // 7
let k = input[1] // 3
// 배열 할당
var circle = Array(1...n)
// 인덱스 초기화
var order = [Int]()
var index = 0
// 원이 없어질 때까지 반복
while !circle.isEmpty {
index = (index + k - 1) % circle.count
order.append(circle[index])
circle.remove(at: index)
}
// 순서의 요소를 문자열로 변환하여 ", " 단위로 조합
let sequence = order.map { String($0) }.joined(separator: ", ")
print("<", sequence, ">", separator: "")
꼬리말
그새 어색해진 Swift 문법
- 오랜만에 파이썬에서 스위프트로 문제를 푸려니 사소한 문법과 메서드들이 발목을 잡았다.
기억해 두어야 할 문법들
- Array(1…n) → [1, 2, …, n]
- remove(at: n) → n번째 인덱스의 요소 제거
- .joined(separator: " ") → 공백 단위로 Array<String>을 한 문자열로 조합
'코딩 테스트 > 백준' 카테고리의 다른 글
[백준] (Python) 12865번: 평범한 배낭 (0) | 2023.07.11 |
---|---|
백준) 1141번: 접두사 (Swift) (0) | 2023.05.29 |
[백준] (Python) A와 B (0) | 2023.05.26 |
[백준] (Python) 7568번: 덩치 (0) | 2023.05.24 |
[백준] (Python) 1193번: 분수찾기 (0) | 2023.05.22 |
댓글