인프런 커뮤니티 질문&답변

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

쿼드트리 문제

작성

·

225

0

http://boj.kr/6488e2fac4f0424485431da588a69213

위 링크에 제가 작성한 코드가 있습니다.

문제예시로 나온 답은 올바르게 출력하나

백준에서는 16%까지 진행 후 FAIL이 났습니다.

수업 모범답안과 좀 다른 컨셉으로 풀이를 했습니다.

모범답안: size크기의 정사각형 영역에서 좌측 상단 값과 다른 것이 하나라도 나오면 4분할 하여 한 단계 더 들어간다.

제 풀이 : 문제 설명에 있는 그대로 이용했습니다.

  • size영역안에 총 합 0 => 0리턴

  • size영역안의 수가 모두 1 => 1리턴

  • 그 외 경우 => 4분할하기

어느 부분에서 잘못 코드를 작성했는지 조언을 받고싶습니다.

그리고 문제예시를 만족했으나 100%통과를 하지 못하는 경우, 오류를 찾는 선생님의 노하우가 있다면

무엇인지도 궁금합니다.

답변 1

0

큰돌님의 프로필 이미지
큰돌
지식공유자

안녕하세요. ㅎㅎ

먼저 코드는 훌륭합니다. 잘 짜셧네요. 다만...

"입출력싱크" 부분이 문제가 있었습니다.

  • 해당 부분은 교안에 있으니 참고 부탁드립니다.

  • 해당부분을 수정했고 제출한 코드는 다음과 같습니다.

http://boj.kr/232b31baedc449c28c486e30f3e76baa

 

그리고 문제예시를 만족했으나 100%통과를 하지 못하는 경우, 오류를 찾는 선생님의 노하우가 있다면

무엇인지도 궁금합니다.

>> 일단 교안을 반드시 외워주셔야 해요. 하하 / 제 노하우는 다음과 같아요. 최소, 최대로 예시를 넣어봅니다. 이 문제 같은 경우는 모두가 같을 때, 다를 때 최소 범위는 1, 최대 범위는 64이구요. 해당부분을 고려해서 예시를 넣어보시면 됩니다. 저 또한 ddo님의 코드를 테스팅해봤어요. 1 0, 2 1111... 뭐 이런식으로요. 보통은 최소 최대로 예시를 넣었을 때 어떠한 부분이 틀렸는지 나오지만 이렇게 해도 안나오는 경우는 그냥 문제를 다시 푸는 방법을 사용합니다.

감사합니다.

입출력 싱크에 대한 교안 자료를 다시 한번 살펴봤습니다.

scanf, printf가 더 빠르며,

cin, cout은 stdio c라이브러리와 버퍼 동기화하는데 시간을 더 소비한다는 설명이라

특별히 시간과 관련된 결과인 『실행시간 초과』가 뜨지 않으면 신경을 쓰지 않았습니다.

따라서 백준에서도 '시간초과'가 아닌 '틀렸습니다'가 떴을 때 입출력싱크를 전혀 생각하지 못했는데요.

(솔직히 항상 모든 문제를 풀 때 이유없이 ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); 코드를 작성했습니다)

선생님 모범답안에는 ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); 코드가 들어 있어도 '맞았습니다'이지만

저의 풀이에는 ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); 코드가 없어야지 '맞았습니다' 를 볼 수 있는 차이가 어디에서 나오는지 궁금합니다.

앗.. 찾았습니다.

scanf("%1d", &a[i][j]); 로 다닥다닥 붙어있는 숫자들을 받을려고

scanf를 사용했던 것이 ;;; 눈에 들어오네요ㅠㅠ

창신동 장첸님의 프로필 이미지
창신동 장첸

작성한 질문수

질문하기