티스토리 뷰

알고리즘

45. 공주구하기

홍복치 2020. 12. 21. 21:55

인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.

문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅

 

 

입력예제 1

8 3

 

출력예제 1 

7

 

풀이 

- 시뮬레이션 문제

- 8명의 왕자를 시계방향, 3번째에 해당하는 왕자를 한명씩 추방

- 입력 변수: n, k(왕자 수, 특정 수)

 

- 풀이법

(1) 벡터배열 0으로 초기화

(2) 무한루프를 돌며 position값을 증가 => 배열의 값이 0이면 cnt++

(3) cnt==k가 될때 cnt를 0으로 초기화, bp++, 해당 위치에 1 넣어줌

(4) 루프를 돌다가 position값이 n보다 커질때, 1로 다시 초기화 => if(pos>n) pos=1;

(5) 루프 돌다가 bp가 n-1, 즉 한 명의 왕자를 제외한 나머지 왕자가 다 추방됬을 때 break;


#include <stdio.h>
#include <vector>
#include <algorithm>
using namespace std;

// 45. 공주 구하기(조세퍼스)

int main() {
    int n, k, pos=0, bp=0, cnt=0, i;  //n: 왕자, k: 특정수, bp: 1의 개수 n-1일 시 break, cnt 특정수 만족 check
    scanf("%d %d", &n, &k); //입력
    vector<int> prince(n+1); //1~n
    while(1){
        //bp=n-1이면 break
        pos++;
        if(pos>n) pos=1;
        if(prince[pos]==0){
            cnt++;
            if(cnt==k){
                //왕자 out
                prince[pos]=1;
                cnt=0;
                bp++; //7명 out시켜야 함
            }
        }
        if(bp==n-1) break;
    }
    
    //최종 출력
    for(i=1;i<=n;i++){
        if(prince[i]==0){
            printf("%d\n",i);
            break;
        }
    }
    return 0;
}

'알고리즘' 카테고리의 다른 글

47. 봉우리  (0) 2020.12.23
46. 멀티태스킹(카카오 먹방 문제 변형)  (0) 2020.12.22
44. 마구간 정하기  (0) 2020.12.18
43. 뮤직비디오  (0) 2020.12.17
24. 이분검색  (0) 2020.12.16
최근에 올라온 글
Total
Today
Yesterday