문제

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

걸린 시간

01 : 02 : 23

풀이

Python3

if __name__ == "__main__":
    N, K = map(int, input().split())

    arr = []
    result = []

    for i in range(1, N+1):
        arr.append(i)    

    # 시작 인덱스
    start = 0

    # 리스트가 빌 때 까지 반복
    while len(arr) != 0:
        # 삭제와 동시에 결과값을 저장
        # -1 은 0부터 시작하는 인덱스를 생각 
        result.append(arr[(start + K - 1) % N])
        del arr[(start + K - 1) % N]

        # 시작 인덱스 갱신
        start = (start + K - 1) % N

        # 줄어든 리스트 개수를 갱신
        N = len(arr)

    print('<', end='')
    for i in range(0, len(result)-1):
        print(result[i], end=", ")
    print(result[-1], '>', sep='', end='')

결과인 result 리스트를 출력하는 부분에서 생긴 코딩 실수를 찾는 데 시간을 많이 보냈다.

다른 풀이

C++

#include <stdio.h>
#include <iostream>
#include <queue>
using namespace std;

int main(){
    int N, K;
    scanf("%d %d", &N, &K);
    queue<int> q;
    for(int i = 1; i < N+1; i++)
        q.push(i);
    printf("<");
    int tmp;
    int count = 1;
    while(!q.empty()){
        if(count%K == 0){
            tmp = q.front();
            if(q.size() != 1)
                printf("%d, ", tmp);
            else
                printf("%d", tmp);
            q.pop();
            count = 1;
        }
        else{
            tmp = q.front();
            q.pop();
            q.push(tmp);
            count++;
        }
    }
    printf(">\n");
    return 0;
}

문제의 본래 의도인 queue 를 사용해서 다시 풀었다. (어렵게도 풀었었네)

'Baekjoon' 카테고리의 다른 글

Baekjoon 1316번 그룹 단어 체커  (0) 2020.07.21
Baekjoon 4949번 균형잡힌 세상  (0) 2020.07.21
Baekjoon 1966번 프린터 큐  (0) 2020.07.20
Baekjoon 1874번 스택 수열  (0) 2020.07.20
Baekjoon 1002번 터렛  (0) 2020.07.20

댓글