작성
·
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); 코드가 없어야지 '맞았습니다' 를 볼 수 있는 차이가 어디에서 나오는지 궁금합니다.