본문 바로가기
프로그래밍/CodeUp

CodeUp[Q_2035] : 앉을 수 있는 자리

by 조원일 2020. 3. 26.
728x90

1. 문제

https://codeup.kr/problem.php?id=2035

 

앉을 수 있는 자리

첫째 줄에 의자의 길이 n이 입력된다. ( 1 <= n <= 10,000 ) 둘째 줄에 제일 왼쪽 자리부터 자리의 정보가 입력된다. 사람이 앉아 있으면 1, 없으면 0을 입력받고, 각 자리의 정보는 띄어쓰기로 구분된다.

codeup.kr

[출처 : 코드업(https://codeup.kr/)]

이번 문제는 의자의 길이와 앉아있는 사람의 여부를 입력받을때 앉을수 있는 경우의 수를 출력하는 문제입니다.

즉 첫버째 자리와 마지막 자리를 제외한 나머지 자리는 n-1, n, n+1 가 모두 0일 경우를 세어주면 됩니다.

여기서 자리에 사람이 있는경우는 다음자리도 앉을수 없기 때문에 바로 다다음자리로 넘어가면 더욱 빠르게 구할수 있습니다.

 

 

2. 풀이방법

STEP 1. 첫번째자리와 마지막 자리에 앉을수 있는지 체크
STEP 2. 각 자리를 확인하며 앉을수 있는지 체크

 

 

3. 해답

#include <stdio.h>

int main() {
	int n, c = 0;
	int arr[10000];

	scanf("%d", &n);

	for (int i = 0; i < n; i++) {
		scanf("%d", &arr[i]);
	}

	if (arr[0] == 0 && arr[1] == 0) c++; // 1,2번자리가 비어있으면
	if (arr[n - 1] == 0 && arr[n - 2] == 0) c++; // n,n-1번째 자리가 비어있으면

	for (int i = 1; i < n - 1; i++) {
		if (arr[i] == 1) i++; // 자리에 있으면 다음자리도 못앉음
		else if (arr[i] == 0) {
			// 자리가 비어있고 양옆이 비어있으면
			if (arr[i - 1] == 0 && arr[i + 1] == 0) c++;
		}
	}
	
	printf("%d", c);

	return 0;
}