티스토리 뷰
문제 요약
- N 명의 사람이 원을 이루며 앉아있고 K번째 사람을 제거하는 과정을 반복.
- 제거되는 사람의 순서를 출력하라.
풀이 1
- 1...N 이 들어있는 arr 배열에서 K 번째 원소를 제거해주는 과정을 반복한다.
import Foundation
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
var N = input[0]
let K = input[1]
var arr = Array(1...N)
var result = [Int]()
var index = K - 1
while !(arr.isEmpty) {
result.append(arr.remove(at: index))
if arr.isEmpty { break }
index = (index + (K - 1)) % arr.count
}
print("<" + result.map{ String($0) }.joined(separator: ", ") + ">")
- 손으로 테스트 케이스를 해보며 문제와 규칙을 이해했다.
- index 변수를 업데이트해주는 부분에서 시간이 오래 걸렸다. ( 쉬워서 금방 끝낼 줄 알았는데...ㅠㅠ)
- 처음엔 이런 식으로 index 변수를 업데이트해주었고 컴파일 에러가 발생했다.
풀이 2 ( Queue )
- 큐를 이용해서 풀어보았다.
- head를 K - 1만큼 이동하면서 사이의 숫자를 다시 enqueue 시키고, queue[head]를 result 배열에 추가한다.
struct Queue {
var queue: [Int] = []
var head: Int = 0
public mutating func enqueue(_ element: Int) {
queue.append(element)
}
public mutating func dequeue() -> Int{
let element = queue[head]
head += 1
return element
}
public var count: Int {
return queue.count
}
}
let input = readLine()!.split(separator: " ").map{ Int(String($0))! }
var N = input[0]
let K = input[1]
var queue = Queue()
var result = [Int]()
for i in 1...N {
queue.enqueue(i)
}
while queue.count - queue.head != 0 {
for _ in 0..<(K-1) {
queue.enqueue(queue.dequeue())
}
result.append(queue.dequeue())
}
print("<" + result.map{ String($0) }.joined(separator: ", ") + ">")
- 첫 번째 풀이보다 메모리 사용량이 높고, 시간도 오래 걸린다.
'Algorithm > 백준' 카테고리의 다른 글
[BOJ] (Swift) 17413 - 단어 뒤집기 2 (0) | 2022.08.03 |
---|---|
[BOJ] (Swift) 10866 - 덱 (0) | 2022.08.02 |
[BOJ] (Swift) 10845 - 큐 (0) | 2022.08.01 |
[BOJ] (Swift) 1406 - 에디터 (0) | 2022.08.01 |
[BOJ] (Swift) 1874 - 스택 수열 (0) | 2022.07.31 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- UICollectionView Error
- 1406 에디터
- Algorithm
- CAGradientLayer
- 요시푸스
- BOJ 17298
- bottom sheet
- 2023 회고
- Card CollectionVIew
- NaverMaps
- BOJ 10799
- crud
- BOJ 10809
- git
- UICollectionView banner
- ios
- BOJ 10820
- Carousel Effect
- autolayout
- BOJ 17413
- BOJ 10866
- Custom Detent
- Gradient View
- Sheet Height
- sheetPresentationController
- Stack
- github
- BOJ 10808
- swift
- BOJ 1935
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함