티스토리 뷰

알고리즘/백준

백준 11025 요세푸스 문제 3

4567은 소수 2024. 1. 6. 14:24

 

https://www.acmicpc.net/problem/11025

 

11025번: 요세푸스 문제 3

첫째 줄에 N과 K가 빈 칸을 사이에 두고 순서대로 주어진다. (1 ≤ K ≤ N ≤ 5,000,000)

www.acmicpc.net

요세푸스 문제는 큐를 이용하여 풀어도 되고, dp를 이용해도 되고, 재귀식을 이용해 풀어도 됩니다.

하지만 현재 문제의 메모리가 매우 제한적이므로, 큐나 dp 등 큰 메모리를 사용하는 것을 사용할 수는 없고, 재귀를 이용하여도, 스택에 function call 메모리가 계속 쌓이므로 사용이 안 됩니다.

따라서 기존 요세푸스 문제 점화식을 loop로 풀어서 적용하면 됩니다.

 

코드는 다음과 같습니다.

#include <iostream>
using namespace std;

int main()
{
    int n,k;
    cin >> n >> k;
    // 메모리 아주 작으니 loop로 변경
    // f(0,k) = 0, f(n,k) = (f(n-1,k) + k -1 mod n) + 1
    int f = 0;
    for(int i = 1; i <= n; i++) {
        f = (f+k-1) % i + 1;
    }
    cout << f;
}

'알고리즘 > 백준' 카테고리의 다른 글

백준 19237 어른 상어 C++  (1) 2024.01.14
백준 22289 큰 수 곱셈 (3) C++  (1) 2024.01.11
백준 13926 gcd(n,k)=1  (1) 2024.01.06
백준 12781 PIZZA ALVOLOC C++  (0) 2023.12.22
백준 1111 IQ Test C++  (0) 2023.12.16
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
TAG
more
«   2025/03   »
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
글 보관함