티스토리 뷰

#include <stdio.h>

int main(void)
{
	int s[4] = {}; //4개의 스택(의 가장 최근 요소)
	int n, r=1;
	scanf("%d", &n); //몇개?
	
	while(n--) {
		int tmp, i=0;
		scanf("%d", &tmp); //값 (1~n까지의)
		
		for(i=0; i<4; i++) { //처음 스택의 최근 요소부터 비교, 만약 스택의 요소보다 크면 그 스택에 넣어줌
			if(s[i] < tmp) {
				s[i] = tmp;
				break;
			}
		}
		if(i == 4) r = 0; //네개의 스택에 속하지 않은 경우
	}
	printf("%s", r ? "YES" : "NO"); //출력
}

 

풀이 : 스택

 

스택이 4개가 주어져 있으며, 이 4개에 입력 받은 순열을 넣었다가, 가장 큰 수부터 차례대로 스택들에서 뽑아낼 수 있는 지를 물어보는 문제입니다.

 

스택의 가장 최근값만 이용하면 되므로, 4개 크기의 배열을 이용했습니다.

 

처음에는 첫번째 스택과 비교를 하며, 이번에 입력받은 값이 더 크다면, 최근 값을 이번에 입력받은 값으로 바꿉니다 (스택에 넣었다고 볼 수 있습니다) 만약 더 작다면, 다음 스택으로 넘어갑니다. 이 과정을 4개의 스택에서 실행하며, 만약 마지막 스택보다 이번에 입력받은 값이 더 작으면, 이는 스택 4개를 이용해서 가장 큰 값부터 뽑을 수 없음을 의미합니다.

 

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

 

25556번: 포스택

포닉스가 순열을 청소할 수 있으면 YES, 불가능하다면 NO를 출력한다.

www.acmicpc.net

 

최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함