프로그래밍/백준(BOJ)
[백준(BOJ) / C][Silver Ⅳ] 10773번 : 제로
데굴데굴이
2024. 1. 4. 21:03
반응형
문제
https://www.acmicpc.net/problem/10773
10773번: 제로
첫 번째 줄에 정수 K가 주어진다. (1 ≤ K ≤ 100,000) 이후 K개의 줄에 정수가 1개씩 주어진다. 정수는 0에서 1,000,000 사이의 값을 가지며, 정수가 "0" 일 경우에는 가장 최근에 쓴 수를 지우고, 아닐 경
www.acmicpc.net
풀이
매 컴파일 마다 배열의 숫자가 달라지므로 동적할당을 이용하였습니다.
숫자가 배열에 들어갈때마다 현재 배열의 위치가 어디인지 확인하는 변수를 만들었고 숫자가 나가고 들어갈떄마다
1를 더하거나 뺐습니다.
Queue 를 생각하고 풀면 쉽게 풀리는 문제입니다.
소스코드
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int length = 0, num = 0, result = 0, cur = 0;
int* arr;
scanf("%d", &length);
arr = (int*)malloc(sizeof(int)*length);
for(int i = 0; i < length; i++)
{
scanf("%d", &num);
// 만약 배열에 숫자가 하나 이상이 있고 0을 입력했다면
// 가장 최근에 넣은 숫자를 제거합니다.
if(num == 0 && cur != 0)
{
// 현재 cur은 입력받은 후 비어있는 곳을 가르키기 떄문에
// cur-1 이 제일 최근에 입력된 숫자 입니다.
arr[cur-1] = 0;
cur--;
continue;
}
// 가르키는 곳에 숫자를 넣고 다음 위치에 넣기 위해
// cur++를 합니다.
arr[cur] = num;
cur++;
}
// 입력된 숫자만큼 result에 값을 넣습니다.
for(int i = 0; i <= cur; i++)
{
result+=arr[i];
}
printf("%d", result);
free(arr);
return 0;
}
반응형