[백준/C++] 1158번 요세푸스 문제 List iterator 사용

2021. 12. 2. 21:15·기타

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

 

1158번: 요세푸스 문제

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

www.acmicpc.net

 

// 코드

#include <bits/stdc++.h>
using namespace std;

int main(){
    list<int> L;
    int N, K, e;
    cin >> N >> K;
    int num[N];
    
    for(int i = 1; i <= N; i++) L.push_back(i);
    list<int>::iterator t = L.begin();
    
    for(int j = 0; j < N; j++)
    {
        e = L.back(); 
        // list L의 끝수 저장
        for(int k = 0; k < K-1; k++)
        {
            	if(e == *t) t = L.begin(); 
                // *t가 끝수와 같을 경우 t에 첫수 주소
            	else t++; // 아니면 주소 +1
        }
        num[j] = *t; 
        // 삭제하는 순서대로 저장
        if(e == *t)
        {
            L.erase(t);
            t = L.begin(); 
            // 끝수를 지웠을 경우 t의 지점을 첫수 주소로 저장
        }
        else t = L.erase(t);
    }
    // 출력
    cout << "<";
    for(int k = 0; k < N; k++)
    	{
        	cout << num[k];
        	if(k != N-1) cout << ", ";
    	}
    cout << ">";
    return 0;
}

 

'기타' 카테고리의 다른 글

[백준/C++] 1259번 팰린드롬수  (0) 2021.12.04
[C++] 여러가지 피라미드 코드 ( 왼쪽 위, 아래 && 오른쪽 위, 아래 )  (2) 2021.12.03
[백준/C++] 5397번 키로거 List  (1) 2021.12.03
C++ STL Vector 사용법  (1) 2021.12.01
[백준/C++] 3273번 두 수의 합  (0) 2021.11.29
'기타' 카테고리의 다른 글
  • [C++] 여러가지 피라미드 코드 ( 왼쪽 위, 아래 && 오른쪽 위, 아래 )
  • [백준/C++] 5397번 키로거 List
  • C++ STL Vector 사용법
  • [백준/C++] 3273번 두 수의 합
heyh0
heyh0
  • heyh0
    doblog
    heyh0
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 2025
      • 2024
      • History
      • 기타
  • 블로그 메뉴

    • GitHub
  • 인기 글

  • 태그

    Til
    Algorithm
    redis
    Spring
    테스트
    회고
    동시성
    DB
    querydsl
    C++
    jpa
    프로젝트
    AOP
    socket
    oauth
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
heyh0
[백준/C++] 1158번 요세푸스 문제 List iterator 사용
상단으로

티스토리툴바