문제 : https://programmers.co.kr/learn/courses/30/lessons/60061
2020 카카오 BLINE RECRUITMENT 기둥과 보 설치
구현 시뮬레이션
문제에 맞춰서 구현을 하는 문제입니다. 음... 저는 규칙을 잘못이해해서 문제를 푸는데 애를 먹었습니다.
[규칙]
● 기둥은 바닥 위에 있거나 보의 한쪽 끝 부분 위에 있거나, 또는 다른 기둥 위에 있어야 합니다.
● 보는 한쪽 끝 부분이 기둥 위에 있거나, 또는 양쪽 끝 부분이 다른 보와 동시에 연결되어 있어야 합니다.
기둥과 보의 설치 가능한 조건을 다음과 같습니다. 저는 '보의 한쪽 끝 부분 위에 있거나' , '한쪽 끝 부분이 기둥 위에 있거나' 라는 규칙을 하나의 보 혹은 하나의 기둥의 한쪽 끝 부분 위에 있어야된다! 로 해석해서 다음과 같은 경우가 안된다고 생각했고, WA의 지옥에 빠졌습니다,,,,,,
#include <string>
#include <vector>
#include<algorithm>
using namespace std;
bool row[102][102], col[102][102];
bool isBuildRow(int x, int y) {
return col[x][y - 1] || col[x + 1][y - 1] || (row[x - 1][y] && row[x + 1][y]);
}
bool isBuildCol(int x, int y) {
return y == 1 || col[x][y - 1] || row[x - 1][y] || row[x][y];
}
bool isRemove(int n) {
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++) {
if (row[i][j] && !isBuildRow(i, j))
return false;
if (col[i][j] && !isBuildCol( i, j))
return false;
}
return true;
}
vector<vector<int>> solution(int n, vector<vector<int>> build_frame) {
for (int i = 1; i <= 101; i++)
for (int j = 1; j <= 101; j++)
row[i][j] = col[i][j] = 0;
for (int i = 0; i < build_frame.size(); i++) {
int x = build_frame[i][0], y = build_frame[i][1], a = build_frame[i][2], b = build_frame[i][3];
x++, y++;
if (b == 0) { // 삭제
if (a == 0) { // 기둥
col[x][y] = 0;
if (isRemove(n + 1))
continue;
col[x][y] = 1;
}
else {
row[x][y] = 0;
if (isRemove(n + 1))
continue;
row[x][y] = 1;
}
}
else { // 설치
if (a == 0) { // 기둥
if (isBuildCol( x, y))
col[x][y] = 1;
}
else { // 보
if (isBuildRow( x, y))
row[x][y] = 1;
}
}
}
vector<vector<int>> answer;
for (int i = 1; i <= n + 1; i++)
for (int j = 1; j <= n + 1; j++) {
if (row[i][j])
answer.push_back({ i - 1, j - 1, 1 });
if (col[i][j])
answer.push_back({ i - 1, j - 1, 0 });
}
sort(answer.begin(), answer.end());
return answer;
}
'Problem Solving > Programmers' 카테고리의 다른 글
[Programmers] 오픈 채팅방 (0) | 2020.04.27 |
---|---|
[Programmers] 외벽 점검 (0) | 2020.04.27 |
[Programmers] 가사 검색 - travelbeeee (0) | 2020.04.23 |
[Programmers] 자물쇠와 열쇠 - travelbeeee (0) | 2020.04.16 |
[Programmers] 괄호 변환 - travelbeeee (0) | 2020.04.15 |