먼저 코드부터 올리겠습니다.
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
int list[1000000] = { 0, };
int main()
{
int n; //n장의 카드, 1이 제일 위 n이 제일 아래인 상태이다.
scanf("%d", &n); //n값 받음.
for (int i = 1; i <=n; i++) { //n까지 배열에 입력. 0부터 입력
list[i] = i;
}
if (n == 1) {
printf("1");
}
int top = 1; int count = 0;
while (n!=0 && n != 1) {
list[top] = 0;
top++;
if (top == n) {
printf("%d", list[top]);
break;
}
n++;
list[n] = list[top];
list[top] = 0;
top++;
}
}
원래 첫 시도는 위와 유사하게 빼는 카드를 0으로 만든 다음에 이 list라는 배열을 앞으로 당기는 for문을 사용해서 문제를 풀었습니다.
다양한 예시들을 넣어보았을 때 제대로 작동이 했고 그걸 백준에 올렸을 때 '시간 초과'가 떠서 시간을 줄이는 방법인 0인 배열의 인자들에 대해서 앞으로 당기지 않고 그냥 top만 이동을 시켜서 마지막에 도달하였을 때 하는 방법을 선택을 해서 문제를 풀었습니다.
이러한 방법으로 푼게 위에 있는 코드입니다. 하지만 위 방법은 쉽게 생각을 할 수 있고 쉽게 코딩이 가능하지만 배열의 크기가 2배가 되는게 싫어서 이렇게 풀기 싫었었는데 아쉬움이 남습니다.
'백준 문제 풀이 & C++ 공부' 카테고리의 다른 글
백준 2292번 C/C++ (0) | 2021.02.12 |
---|---|
백준 2231번 C/C++ (0) | 2021.02.08 |
백준 10163번 C/C++ (0) | 2020.09.06 |
백준 9095번 C/C++ (0) | 2020.08.24 |
백준 11726번 C/C++ (0) | 2020.08.24 |