군대에서_코딩하기_알고리즘_17

신태원·2021년 10월 18일
0

군대에서_코딩하기

목록 보기
18/30
post-thumbnail

거의 매번 글을 쓸때마다 오랜만의 업로드라고 글을 시작하는것같은데.. 이번에도 역시 오랜만의 업로드가 맞다..
그 이유중 첫번째는 얼마전 육군 창업경진대회 본선 진출에 떨어지고 나서 뭔가 번아웃이 세게 왔어서 뭔가 손에 안잡혔었고, 둘째는 요즘 훈련이 너무 많았다.. 사지방 연등에 제한이 있었어서 코딩을 잘 못했다. 그리고 셋째는, 연등을 하면서 문제들을 풀기는 하나, 잘 안풀려서 업로드 할게 없었다..
그리고 오늘 깨달은게 하나 있었다. 고민하다가 잘 안되면 그냥 강의를 들어버리자! 진도가 너무 안나가서 안되겠다..

음.. 오늘 문제는 공주 구하기? 문제였는데, 이건 설명이 굉장히 까다로우니 그냥 사진을 첨부하겠다.

대충 이런 문젠데, 처음에는 런타임 걱정을 많이했다. 뭔가 1차원 배열의 벡터를 만들어서 하는건 알겠으나, 계속해서 돌고돌아야되고 또 N의 범위가 1000까지 나올수도 있어서 그냥 단순하게 반복문을 돌리면 안될것이라 생각해서 뭔가 다른 방향으로 접근했으나, 그냥 단순하게 접근하는게 맞았다..
처음부터 배열들을 0으로 초기화시켜놓고, 하나씩 카운팅하면서 K로 나눠떨어지는 수들만 1로 만들어놓으면 되는 문제다.
생각보다 까다로우면서도 단순한 문제다..
코드는 다음과 같다.

#include<iostream>
#include<vector>
#include<algorithm>

using namespace std;

int main(){
    
    int N, K;
    
    cin>>N>>K;
    //N은 8 K는 3
    int count = N; //벡터안의 실질적 원소 개수
    int temp=1; //세주려고 하는거
    int check_num = 1;
    
    vector<int> prince(N+1);
    
    while(count!=1){
        if(check_num==N+1){
            check_num = 1;
        }
        if(prince[check_num]==0){
            if(temp%K==0){
                prince[check_num]++;
                //cout<<"아웃된 왕자: "<<check_num<<endl;
                count--;
                temp = 1;
                check_num++;
            }
            else{
                temp++;
                check_num++;
            }
        }
        else{
            check_num++;
           
        }
    }
    
    for(int i=1; i<N+1; i++){
        if(prince[i]==0){
            cout<<i;
            break;
        }
    }
}
profile
일단 배우는거만 정리해보자 차근차근,,

0개의 댓글