본문 바로가기

백준/실버

[백준 14465번] 소가 길을 건너간 이유 5 (C++)

문제링크 : https://www.acmicpc.net/problem/14465

 

14465번: 소가 길을 건너간 이유 5

첫 줄에 N, K, B (1 ≤ B,K ≤ N)가 주어진다. 그 다음 B줄에는 고장난 신호등의 번호가 하나씩 주어진다.

www.acmicpc.net

 

#include <bits/stdc++.h> 
using namespace std;
#define fastio ios_base::sync_with_stdio(0); cin.tie(0);

int n, k, b, cnt, result = 987654321;
int arr[100001];
bool check[100001];

int main()
{
	fastio;
	cin >> n >> k >> b;

	for (int i = 0; i < b; i++)
	{
		cin >> arr[i];
		if (!check[arr[i] - 1])      //고장난 값을 true로
		{
			check[arr[i] - 1] = true;
		}
	}

	for (int i = 0; i < n - k + 1; i++)  
	{
		cnt = 0;
		for (int j = i; j < k + i; j++)  //연속한 신호등 수 만큼 탐색
		{
			if (check[j])            //고장났으면 카운트 증가
			{
				cnt++;
			}
		}
		result = min(result, cnt);  //가장 적게 고장난 경우 저장
	}
	cout << result;
	return 0;
}

 

bool 배열의 디폴트가 false이기에 고장난 값을 입력받고 해당 bool 배열의 값을 true로 처리했다.

이후 이중반복문을 통해서 연속한 신호등 수만큼 탐색하여 여기서 고장난 신호등 수 만큼 카운트를 했다.

카운트를 여러번 하므로, 매 반복문마다 0으로 초기화하고 가장 적게 카운트된 값을 result에 저장하여 출력했다.