해결된 질문
작성
·
345
1
강사님 안녕하세요,
5-P 문제를 먼저 풀고 예제에서는 모두 통과 한 것을 확인하고 제출해보니 94% 에서 틀렸다고 항상 나오네요...
저는 bitmask 활용하여 문제를 풀긴했습니다만
무엇이 틀렸는지 감이 오지를 않습니다.
같은 문제에 대한 다른 질문 글을 보니 90% 대에 틀렸다고 나오는 것이 있긴했는데
제 경우도 같은 경우일까요?
일부 주석 포함 제 코드는 다음과 같습니다.
답변 1
0
안녕하세요 KIM님 ㅎㅎ
해당 문제 비트연산으로 푸는거요.
예전에도 다른 수강생분이 질문하셔서 그 때 몇번 시도해보고 실패하고
이번에 KIM님이 말씀하셔서 또 한번 시도해봤는데.. 저도 이상하게 94%에서 틀렸다고 뜹니다..
제 코드는 다음과 같습니다.
http://boj.kr/7144c3d7011b4733a4979c80a4162b63
그냥 이 문제를 비트연산으로 푸는 것은 넘어가는게 좋을 거 같습니다.
도움이 되지 못해 죄송합니다.. ㅠ
또 질문 있으시면 언제든지 질문 부탁드립니다.
감사합니다.
강사 큰돌 올림.
안녕하세요 KIM님 ㅎㅎ
저보다 똑똑하시네요 ㅎㅎ
사실 저 오늘 아침에 일어나서 아니 진짜 왜 틀리지? 하면서 다시 시도하고 있었는데
오버플로 생각지도 못했네요 ㅎㅎ 훌륭하십니다.
제코드에 + KIM님이 말씀하신 비트트림 추가하니까 맞았다고 뜹니다.
저또한 해당 코드 공유합니다.
http://boj.kr/fdfb8909c5b940fa99026f25c1714ab8
훌륭한 내용 공유 감사의 말씀을 드립니다.
강사님 안녕하세요,
비트연산 풀이 오답 관련 고민을 하다가 문제점을 확인하고 고치니
정답처리가 되어서 내용 공유드립니다.
최초 질문드렸을때 대비 코드에서 변경된 점이라고 하면,
최초 코드에서는, 회전 연산에 대해 bitshift 처리 하는 함수에서, bitshift 후에 8 비트 초과의 비트값에 대한 결과값을 그대로 출력을 했었는데요.
이렇게되면 반시계 방향으로 bitshift 가 계속 일어나는 경우 8비트 보다 큰 비트방향으로 1 이 누적이 되다보면 int 자료형의 overflow 가 발생할 수 있겠다는 생각이 들었습니다.
그래서, 아래 함수 보시면 return 단계에서 8 비트 초과하는 비트자릿수에 대해 bit_trim 처리를 해주니 overflow 가 없게 되어 정답처리가 되었습니다.
감사합니다.