백준 2578 c : 구현

magicdrill·2025년 2월 17일

백준 문제풀이

목록 보기
552/673

백준 2578 c : 구현

c언어에서 map을 사용할 수 없기 때문에c언어에서 map을 사용할 수 없기 때문에 자료구조를 한번 수정했다. 또한 bool type을 활용하기 위해 #include <stdbool.h>를 추가함을 배웠다.

#include <stdio.h>
#include <stdbool.h>

#pragma warning (disable:4996);

void input_data(int bingo[26][2], int speaking_bingo[5][5]) {
	int i, j, num;

	for (i = 0; i < 5; i++) {
		for (j = 0; j < 5; j++) {
			scanf("%d", &num);
			bingo[num][0] = i;
			bingo[num][1] = j;
		}
	}

	for (i = 0; i < 5; i++) {
		for (j = 0; j < 5; j++) {
			scanf("%d", &speaking_bingo[i][j]);
		}
	}

	return;
}

int check_bingo(bool check[5][5]) {
    int i, j;
    int bingo_count = 0;

    // 가로 줄 빙고
    for (i = 0; i < 5; i++) {
        bool row_bingo = true;
        for (j = 0; j < 5; j++) {
            if (!check[i][j]) {
                row_bingo = false;
                break;
            }
        }
        if (row_bingo) { 
            bingo_count++; 
        }
    }

    // 세로 줄 빙고
    for (j = 0; j < 5; j++) {
        bool col_bingo = true;
        for (i = 0; i < 5; i++) {
            if (!check[i][j]) {
                col_bingo = false;
                break;
            }
        }
        if (col_bingo) { 
            bingo_count++; 
        }
    }

    // 왼위 -> 오른아래 대각선
    bool diag1_bingo = true;
    for (i = 0; i < 5; i++) {
        if (!check[i][i]) {
            diag1_bingo = false;
            break;
        }
    }
    if (diag1_bingo) {
        bingo_count++;
    }

    // 오른위 -> 왼아래 대각선
    bool diag2_bingo = true;
    for (i = 0; i < 5; i++) {
        if (!check[i][4 - i]) {
            diag2_bingo = false;
            break;
        }
    }
    if (diag2_bingo) { 
        bingo_count++; 
    }

    return bingo_count;
}

int count_bingo(int bingo[26][2], int speaking_bingo[5][5]) {
	int count = 0;
	bool check[5][5] = { false };
	int i, j, current, x, y;

	for (i = 0; i < 5; i++) {
		for (j = 0; j < 5; j++) {
			current = speaking_bingo[i][j];
			count++;

			x = bingo[current][1];
			y = bingo[current][0];
			check[y][x] = true;

			if (check_bingo(check) >= 3)
			{
				return count;
			}
		}
	}

	return count;
}

int main(void) {
	//int bingo[5][5] = { 0 };
	//int my_bingo[5][5] = { 0 };
	
	//1 2 3 4 5 -> 빙고 번호
	//0 1 2 3 4 -> x좌표
	//0 1 2 3 4 -> y좌표

	int bingo[26][2];//[i][j][1] : x좌표, [i][j][0] : y좌표
	int speaking_bingo[5][5]; //사회자가 말하는 빙고

	input_data(bingo, speaking_bingo);
	printf("%d\n", count_bingo(bingo, speaking_bingo));

	return 0;
}

0개의 댓글