boardcover 문제... swon31 예제에 대해선 값이 제대로 나오는데 어디가 틀린 건지 오류가 계속 뜨네요... 혹시 정답 맞추신 분 게시면 다른 경우 값 얻을 수 있을까요? #include <iostream> using namespace std; int H, W; bool board[20][20]; int whiteCount = 0; int fillCount = 0; int fill(); int fill(int i, int j, int shape) { switch (shape) { case 1: { if (i + 1 >= H || j + 1 >= W) return 0; if (board[i][j] & board[i + 1][j] & board[i + 1][j + 1]) { board[i][j] = board[i + 1][j] = board[i + 1][j + 1] = false; whiteCount--; whiteCount--; whiteCount--; fill(); return 1; } return 0; break; } case 2: { if (i + 1 >= H || j - 1 <= 0) return 0; if (board[i][j] & board[i + 1][j] & board[i + 1][j - 1]) { board[i][j] = board[i + 1][j] = board[i + 1][j - 1] = false; whiteCount--; whiteCount--; whiteCount--; fill(); return 1; } return 0; break; } case 3: { if (i + 1 >= H || j + 1 >= W) return 0; if (board[i][j] & board[i][j + 1] & board[i + 1][j + 1]) { board[i][j] = board[i][j + 1] = board[i + 1][j + 1] = false; whiteCount--; whiteCount--; whiteCount--; fill(); return 1; } return 0; break; } case 4: { if (i + 1 >= H || j + 1 >= W) return 0; if (board[i][j] & board[i][j + 1] & board[i + 1][j]) { board[i][j] = board[i][j + 1] = board[i + 1][j] = false; whiteCount--; whiteCount--; whiteCount--; fill(); return 1; } return 0; break; } default: break; } } int unfill(int i, int j, int shape) { switch (shape) { case 1: { board[i][j] = board[i + 1][j] = board[i + 1][j + 1] = true; whiteCount++; whiteCount++; whiteCount++; return 0; } case 2: { board[i][j] = board[i + 1][j] = board[i + 1][j - 1] = true; whiteCount++; whiteCount++; whiteCount++; return 0; } case 3: { board[i][j] = board[i][j + 1] = board[i + 1][j + 1] = true; whiteCount++; whiteCount++; whiteCount++; return 0; } case 4: { board[i][j] = board[i][j + 1] = board[i + 1][j] = true; whiteCount++; whiteCount++; whiteCount++; return 0; } default: break; } } int fill() { int i, j; bool flag = false; for (i = 0; i < H; i++) { //왼쪽 위 찾기 for (j = 0; j < W; j++) { if (board[i][j] == true) { flag = true; break; } } if (flag) break; } if (whiteCount == 0) { //다 채워짐 fillCount++; return 1; } if (fill(i, j, 1)) unfill(i, j, 1); if (fill(i, j, 2)) unfill(i, j, 2); if (fill(i, j, 3)) unfill(i, j, 3); if (fill(i, j, 4)) unfill(i, j, 4); return 0; } int boardCover() { fillCount = 0; whiteCount = 0; for (int i = 0; i < H; i++) { //흰칸 갯수 세기 for (int j = 0; j < W; j++) { if (board[i][j] == true) whiteCount++; } } if (whiteCount % 3 != 0) return 0; fill(); return fillCount; } int main(void) { int num; cin >> num; //반복 횟수 for (int i = 0; i < num; i++) { cin >> H; //게임판의 세로 가로 cin >> W; for (int i = 0; i < 20; i++) { //초기화 for (int j = 0; j < 20; j++) { board[i][j] = false; } } for (int i = 0; i < H; i++) { //보드 만들기 for (int j = 0; j < W; j++) { char input; cin >> input; if (input == '#') board[i][j] = false; else if (input == '.') board[i][j] = true; } } cout << boardCover() << endl; } return 0; } 8년 전
2개의 댓글이 있습니다. JongMan 이 부분이 유일한 틀린 부분인지는 모르겠지만, if (i + 1 >= H || j - 1 <= 0) return 0; 은 확실히 틀렸네요. 8년 전 link swon31 ㄴ 앗 감사합니다!! 덕분에 풀었어요 다음부턴 코드를 더 꼼꼼히 봐야겠네요 ㅠㅠㅠ 8년 전 link 정회원 권한이 있어야 커멘트를 다실 수 있습니다. 정회원이 되시려면 온라인 저지에서 5문제 이상을 푸시고, 가입 후 7일 이상이 지나셔야 합니다. 현재 문제를 푸셨습니다.
swon31
예제에 대해선 값이 제대로 나오는데 어디가 틀린 건지 오류가 계속 뜨네요... 혹시 정답 맞추신 분 게시면 다른 경우 값 얻을 수 있을까요?
8년 전