Algorithm, Problem Solving/백준(boj)

[백준][java] 14492 - 부울행렬의 부울곱

태오님 2023. 3. 21.

https://www.acmicpc.net/problem/14492

 

14492번: 부울행렬의 부울곱

문제를 출제하던 욱제는 갑자기 괴랄한 문제를 내고 싶어졌다. 불행하게도, 이번 대회에는 프로그래밍 뉴비들이 많기 때문에 그럴 수는 없었다. 하지만 욱제는 신입생들을 괴롭히고픈 욕망을

www.acmicpc.net

난이도 : S5

구현 : 2차원행렬

시간복잡도 : N^3


문제 풀이

  • 부울곱
  • 행렬곱

부울곱 개념과 행렬곱 개념만 알면 쉽게 해결되는 문제입니다.

 

A행렬

1 1 0
0 1 0
0 0 1

B행렬

1 0 0
1 1 1
0 0 1

 

부울곱 계산 예시)

정답 행렬의 (0,0)의 칸의 값 구하기 -> (1 && 1) | | (1 && 1) || (0 && 1) -> 1

1이 한 번이라도 나오면 1이 된다.

 


코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main {

    private int N;
    private boolean[][] A, B;
    private int res;

    public void solution() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        N = Integer.parseInt(br.readLine());

        A = new boolean[N][N];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                if (Integer.parseInt(st.nextToken()) == 1) {
                    A[i][j] = true;
                }
            }
        }

        B = new boolean[N][N];
        for (int i = 0; i < N; i++) {
            st = new StringTokenizer(br.readLine());
            for (int j = 0; j < N; j++) {
                if (Integer.parseInt(st.nextToken()) == 1) {
                    B[i][j] = true;
                }
            }
        }

        boolean flag;
        res = 0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                flag = false;
                for (int k = 0; k < N; k++) {
                    flag |= A[i][k] & B[k][j];
                    if (flag) {
                        res++;
                        break;
                    }
                }
            }
        }

        System.out.println(res);
    }

    public static void main(String[] args) throws IOException {
        new Main().solution();
    }
}

댓글