인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

Inflearn Community Q&A

starkshn8823's profile image
starkshn8823

asked

10-Week C++ Coding Test | Algorithm Coding Test

2-A

백준 2178 질문 있습니다.

Resolved

Written on

·

51

0

http://boj.kr/e8efaf05143848f897d8154f0609f71e

현재 코드는 맞았습니다. 가 뜹니다. 맞은 이유가

// ios_base::sync_with_stdio(false);

// cin.tie(NULL);

// cout.tie(NULL);

이렇게 주석처리를 하니까 맞더라구요.. 이것때문에 2틀정도 머리를 싸맸는데

왜 위 코드 3줄을 주석처리 한다고 맞았습니다 가 뜨는지 잘 이해가 안가는데 왜 그런것인가용??

c++코딩-테스트

Answer 2

0

kundol님의 프로필 이미지
kundol
Instructor

안녕하세요 ㅎㅎ

	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);는 입출력의 효율성을 높이기 위해 사용되는 코드입니다. 하지만 이 코드들이 프로그램의 동작에 따라 영향을 미칠 수 있는 경우가 있습니다.

  1. 입출력 동기화: ios_base::sync_with_stdio(false);는 C++의 표준 스트림(cout, cin)을 C의 표준 스트림(printf, scanf)과의 동기화 여부를 설정합니다. 동기화를 해제하면 C++ 표준 스트림이 빠르게 동작하지만, 이 때문에 C와 C++ 입출력을 혼합하여 사용할 경우 그 순서가 예상치 못하게 변경될 수 있습니다.

  2. 입출력 조작 순서: cin.tie(NULL);, cout.tie(NULL);는 입출력 시의 순서에 영향을 줍니다. 기본적으로 cincout과 묶여 있어서 입력이 있을 때마다 출력이 확정되는데, 이를 해제하면 순서가 변동될 수 있습니다.

특히, 문제를 풀 때 이러한 코드를 주석 처리했을 때와 처리하지 않았을 때의 결과가 달라질 수 있습니다. 이는 입출력의 순서나 버퍼링 방식이 예상과 다르게 작용하기 때문일 가능성이 큽니다.

문제 해결에는 이러한 설정들이 필수적이지 않을 수 있으므로, 일반적으로 맞다면 코드를 주석 처리하여 동작을 확인하고, 자료형 설정과 입출력 방식을 검토하며 맞추어 나가는 것이 좋습니다.

아래의 관련 질문에서 유사한 상황을 확인하실 수 있습니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

starkshn8823's profile image
starkshn8823

asked

Ask a question