본문 바로가기
백준 문제 풀이 & C++ 공부

백준 2614번 C/C++

by daisy0461 2021. 2. 8.

먼저 코드부터 올리겠습니다. 

#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