Resolved
Written on
·
51
0
http://boj.kr/e8efaf05143848f897d8154f0609f71e
현재 코드는 맞았습니다. 가 뜹니다. 맞은 이유가
// ios_base::sync_with_stdio(false);
// cin.tie(NULL);
// cout.tie(NULL);
이렇게 주석처리를 하니까 맞더라구요.. 이것때문에 2틀정도 머리를 싸맸는데
왜 위 코드 3줄을 주석처리 한다고 맞았습니다 가 뜨는지 잘 이해가 안가는데 왜 그런것인가용??
Answer 2
0
안녕하세요 ㅎㅎ
int n, m; cin >> n >> m;
for (int i = 0; i < n; ++i)
for (int j = 0; j < m; ++j)
scanf("%1d", &board[i][j]);
이부분 때문에 그렇습니다. ios_ ... 를 쓸 때는 scanf와 cin을 같이 쓰면 안됩니다. 이부분은 교안내 "입출력 싱크" 부분을 참고부탁드립니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다. starkshn님.
질문해주신 내용에서 언급된 ios_base::sync_with_stdio(false);
, cin.tie(NULL);
, cout.tie(NULL);
는 입출력의 효율성을 높이기 위해 사용되는 코드입니다. 하지만 이 코드들이 프로그램의 동작에 따라 영향을 미칠 수 있는 경우가 있습니다.
입출력 동기화: ios_base::sync_with_stdio(false);
는 C++의 표준 스트림(cout, cin)을 C의 표준 스트림(printf, scanf)과의 동기화 여부를 설정합니다. 동기화를 해제하면 C++ 표준 스트림이 빠르게 동작하지만, 이 때문에 C와 C++ 입출력을 혼합하여 사용할 경우 그 순서가 예상치 못하게 변경될 수 있습니다.
입출력 조작 순서: cin.tie(NULL);
, cout.tie(NULL);
는 입출력 시의 순서에 영향을 줍니다. 기본적으로 cin
은 cout
과 묶여 있어서 입력이 있을 때마다 출력이 확정되는데, 이를 해제하면 순서가 변동될 수 있습니다.
특히, 문제를 풀 때 이러한 코드를 주석 처리했을 때와 처리하지 않았을 때의 결과가 달라질 수 있습니다. 이는 입출력의 순서나 버퍼링 방식이 예상과 다르게 작용하기 때문일 가능성이 큽니다.
문제 해결에는 이러한 설정들이 필수적이지 않을 수 있으므로, 일반적으로 맞다면 코드를 주석 처리하여 동작을 확인하고, 자료형 설정과 입출력 방식을 검토하며 맞추어 나가는 것이 좋습니다.
아래의 관련 질문에서 유사한 상황을 확인하실 수 있습니다:
3474 교수가 된 현우 문제 질문입니다! - 기존 답변을 통해 ios_base::sync_with_stdio(false);
와 관련된 문제 해결에 대해 강사님의 설명을 참고하실 수 있습니다.
ios_base, cin.tie 코드 생략 - 위 코드의 생략과 관련된 답변을 통해 어떤 상황에서 문제가 발생할 수 있는지 파악할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.