[백준/BOJ]2891. 카약과 강풍 [Silver 5]

  1. 카약과 강풍

문제출처 : https://www.acmicpc.net/problem/2891

code

#include <stdio.h>
int main()
{
	//N = 팀의수 S = 카약이 손상된 팀의 수 R = 카약을 하나 더 가져온 팀의 수
	int N, S, R, i, j, cnt = 0;
	int broken_kayak[10] = { 0 }, more_kayak[10] = { 0 };
	scanf("%d %d %d", &N, &S, &R);
	for (i = 0; i < S; i++)
		scanf("%d", &broken_kayak[i]);
	for (i = 0; i < R; i++)
		scanf("%d", &more_kayak[i]);
//조건
	for (i = 0; i < S; i++)
		for (j = 0; j < R; j++)
			if (broken_kayak[i] == more_kayak[j])
			{
				broken_kayak[i] = -1;
				more_kayak[j] = -1;
			}
	for (i = 0; i < S; i++)
	{
		for (j = 0; j < R; j++)
		{
			if (broken_kayak[i] == more_kayak[j] - 1 || broken_kayak[i] == more_kayak[j] + 1)
			{
				broken_kayak[i] = -1;
				more_kayak[j] = -1;
			}
		}
		if (broken_kayak[i] != -1)
			cnt++;
	}
	printf("%d", cnt);
	return 0;
}

반복문을 많이 도는데, S와 R을 혼동하지 않고 반복하자.
코드도 비교적 간단한편인데, N,R,카약이손상된팀, 여분있는팀 이렇게 입력을 다받고,
카약이 손상된팀, 여분있는팀을 이중반복문으로 돌면서 여분있는팀 +-1범위내에 손상된 팀이 있으면 겹치지않고 구분하기 쉽게 -1로 만들어준다. 0으로 만들면 1번 팀과 -1범위내에 있기 때문에 -1로 해줬다.
그리고 -1이 아니면 cnt를 ++해서 팀의 갯수를 세준다.

여기서 카약을 하나 더 가져온 팀의 카약이 손상되었다면, 여분의 카약으로 경기에 출전하게되고, 이 카약은 다른 팀에게 빌려줄 수 없다. 이조건에 해당하는 조건을 걸어줘야 한다.
이중 반복문을 돌면서 손상된팀 == 여분있는팀 이면 둘다 -1로 만들어서 다른 팀과 짝을 못이루게 만들어주면 된다. 나는 처음에 여분있는 팀배열만 -1만들어줘서 계속틀리더라

좋은 웹페이지 즐겨찾기