문제출처 : 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만들어줘서 계속틀리더라