728x90
▶문제 : 탑 (codeup.kr)
▶코드 작성
#include <stdio.h>
int stack[500000][2];//{값 , 자리}
int main()
{
int n, num, leng = -1;
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
scanf("%d", &num);//임의로 변수 num에 값을 입력
while (leng >= 0)//스택 길이가 0이상일 때
{
if (stack[leng][0] < num) leng--;//스택 상단 값이 num보다 작을 때 길이 감소
else//스택 상단 값이 num보다 크면
{
printf("%d ", stack[leng][1] + 1);//그 값의 자리 출력
break;//종료
}
}
if (leng == -1) printf("0 ");//스택에서 num보다 큰 값을 못찾을 때
stack[++leng][0] = num;//스택 값 추가
stack[leng][1] = i;//스택 자리번호 추가
}
return 0;
}
▶해석
스택을 이용해 입력받을 때마다 비교하여 값을 추가해준다.
스택이 비어있다면 0을 출력하고 값과 자리 번호를 추가해준다.
스택에서 맨 위 상단 값을 비교하여 상단 값이 num보다 크면 그 상단 값의 자리 번호를 출력해주고 num보다 작으면 스택 길이를 감소하여 상단 값을 제거해준다.
728x90
'코드업(codeup) > C' 카테고리의 다른 글
코드업(codeup) 2655 : 1차 함수의 x절편 구하기 C언어 (0) | 2022.01.29 |
---|---|
코드업(codeup) 4040 : 펜션 C언어 (0) | 2022.01.21 |
코드업(codeup) 3102 : STL stack C언어 (3) | 2022.01.17 |
코드업(codeup) 3127 : 수식 계산 1 C언어 (0) | 2022.01.17 |
코드업(codeup) 3715 : 올바른 괄호 3 C언어 (0) | 2022.01.17 |
댓글