막대 분류
면접 대비시간 제한1초메모리 제한1024 MB
N×N 이진 격자가 주어지면, 최대 N개의 칸이 뒤집힌 1로 채워진 행이나 열이 세로 막대인지 가로 막대인지, 아니면 둘 다 가능한지 판별합니다.
문제
머신러닝 수업의 과제로 이미지 속 세로 막대와 가로 막대를 구별하는 프로그램을 작성해야 한다. 학습 데이터를 만들기 위해 다음 방법을 사용한다. 먼저 격자를 0으로 채운다. 다음으로 한 행 또는 한 열을 골라 1로 채운다. 마지막으로 임의의 칸을 최대 개 골라 뒤집는다. 칸을 뒤집는다는 것은 0은 1로, 1은 0으로 바꾸는 것이다.
이 방식으로 데이터를 만드는 것은 쉽다. 하지만 정답은 어떻게 만들까? 학습 데이터를 사람이 일일이 검사하면 몇 시간이 걸린다. 모든 정답을 자동으로 찾아 주는 프로그램이 있으면 좋겠다.
주어진 행렬은 위 설명대로 생성된 것이다. 1로 채워진 것이 열인지 행인지, 아니면 판단할 수 없는지 찾는 프로그램을 작성하라.
입력
첫 줄에 격자의 크기 ()이 주어진다. 다음 개의 줄에는 0과 1로 이루어진 길이 의 문자열이 주어진다. 각 문자열이 격자의 행이다.
입력은 0으로 채운 격자에 1을 행이나 열에 놓은 뒤 최대 개의 칸을 뒤집는 방식으로 생성되었음이 보장된다.
출력
세로 막대(열)였다면 |를, 가로 막대(행)였다면 -를 출력한다. 두 경우 모두 가능해서 판단할 수 없다면 +를 출력한다.