본문 바로가기
코드업(codeup)/C

[코드업(codeup)/C]코드업(codeup) 4654 : 탑 C언어

by starfish22 2022. 1. 20.
728x90

▶문제 : 탑 (codeup.kr)

 

문제 4) 탑 (초등 4) KOI 통신연구소는 레이저를 이용한 새로운 비밀 통신 시스템 개발을 위한 실험을 하고 있다. 실험을 위하여 일직선 위에 N개의 높이가 서로 다른 탑을 수평 직선의 왼쪽부터 오

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

댓글