인프런 커뮤니티 질문&답변
6강 3번 정사각형 그리키 코드 질문 드립니다.
작성
·
233
0
안녕하세요 선생님의 코드 설명을 듣고 6강 3번 코드를 구현했습니다. 그리고 제가 코드를 구현한 것에 선생님의 코드를 참고하여 코드를 조금 수정했습니다.
visual studio에서는 정상적으로 정답이 출력이 되는데, 채점 사이트에서는 계속 오류가 출력됩니다. 그래서 제가 모든 테스트를 visual studio에서 돌려봤는데, 모두 정답이 출력됨에도 채점 사이트에서는 예상치 못한 오답이 출력되거나, 아예 답이 출력되지 않는 문제가 생깁니다.
띄어쓰기가 없는 입력을 한글자씩 숫자로 받기 위해서 scanf("%1d", &board[i][j]) 를 사용했습니다.
제 생각에는 scanf를 사용해서 이런 문제가 발생한 것 같은데, 아무리 찾아봐도 이유를 모르겠습니다ㅠㅠ
왜 그런지 알 수 있을까요? 답변 부탁드립니다! 감사합니다.
아래는 제가 구현한 코드입니다.
#include <bits/stdc++.h>
using namespace std;
int main() {
ios_base::sync_with_stdio(false);
freopen("input.txt", "rt", stdin);
int n, m;
cin >> n >> m;
vector < vector <int> > board(n, vector <int>(m, 0));
vector < vector <int> > dy(n, vector <int>(m, 0));
vector <int> answer(min(n, m) + 5, 0); // 0번부터 사용, 0 만나면 break;
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
scanf("%1d", &board[i][j]);
if (board[i][j] == 0) continue; // 0이면 그냥 넘기기
if (i >= 1 && j >= 1) { // 경계선 밖으로 나가지 않고, board[i][j]==1이라면
dy[i][j] = min(dy[i - 1][j - 1], min(dy[i - 1][j], dy[i][j - 1])) + 1;
}
else { // i가 0이거나 j가 0일때는 i-1, j-1이 경계에서 벗어나므로 그대로 입력
dy[i][j] = board[i][j];
}
}
}
for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
for (int k = 1; k <= dy[i][j]; k++) { // k크기 이하인 정사각형 개수 세기
answer[k]++;
}
}
}
for (int i = 1;; i++) {
if (answer[i] == 0) break;
cout << i << " " << answer[i] << endl;
}
return 0;
}
답변 1
0
안녕하세요^^
답변이 늦어서 죄송합니다. 제가 보기에도 scanf를 이 채점사이트가 받아들이지 않는 것 같습니다. 저처럼 스트링으로 읽어서 처리를 해야 할 것 같습니다.




