일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- AppleDeveloperAcademy
- 애플디벨로퍼아카데미
- SWiFT
- HumanInterfaceGuidelines
- Xcode
- HumanInterfaceGuideline
- 백준
- 코딩테스트
- POSTECH
- 코드트리
- Algorithm
- Playground #Swift
- 1935
- HIG
- Apple
- 코딩트리조별과제
Archives
- Today
- Total
WonniOS
[Swift] 8. 백준 1158번: 요세푸스 문제 본문
사실 뭔가 백준 설명만 보고서는 요세푸스를 이해하기 쉽지 않았다. K번째 사람을 지우고, 지운 순서의 다음 순서부터 카운트를 센다는 말이 명시되어 있지 않았기 때문이다. 그래서 따로 찾아봐야 문제를 이해할 수 있었다.
문제 링크
https://www.acmicpc.net/problem/1158
1158번: 요세푸스 문제
첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000)
www.acmicpc.net
풀이
1부터 N까지 배열에 숫자를 넣는 쉬운 방법을 알게 되었다.
바로 var array = Array(1...input![0]!) 이렇게 선언해주면 for문 안돌리고 한줄로 선언할 수 있다.
그리고 계속 반복하면서 해당 index의 K번째 숫자를 지워주고 index를 나머지 연산자를 이용해 변경해주는 방식으로 구현했다.
제출 코드
import Foundation
let input = readLine()?.split(separator: " ").map{ Int($0) }
var array = Array(1...input![0]!)
var answer: [Int] = []
var index = input![1]!-1
var count = 0
while true {
answer.append(array.remove(at: index ))
if array.isEmpty {break}
index = (index + input![1]!-1) % array.count
}
print("<"+answer.map({String($0)}).joined(separator: ", ")+">")
'Algorithm' 카테고리의 다른 글
[Swift] 10. 백준 17298번: 오큰수 (0) | 2023.04.04 |
---|---|
[Swift] 9. 백준 10866번: 덱 (0) | 2023.03.08 |
[Swift] 7. 백준 10845번: 큐 (0) | 2023.02.23 |
[Swift] 6. 백준 1406번: 에디터 (0) | 2023.02.22 |
[Swift] 5. 백준 1874번: 스택 수열 (0) | 2023.02.15 |