Written on
·
51
0
안녕하세요 큰돌님. 덕분에 많은 도움 받으며 공부하고 있습니다. 공부 중에 6-I 파닭파닭 문제에서 질문이 생겼습니다.
http://boj.kr/a3c8c4df3ccd47429c51f910440f47d1
위 코드가 제가 제출한 코드인데요, 라면에 들어갈 남은 파의 길이를 계산하는 부분에서 저는 전체 파길이에서 사용한 파길이를 빼는 로직말고 나머지연산으로 계산하는 게 먼저 떠올라 나머지 연산을 통해 계산했습니다.
제가 생각했을 때는 두가지 경우 동일한 결과를 보여야 하는데 이 부분만 큰돌님처럼 전체에 파닭에 사용한 파 길이를 빼는 방식으로 바꾸니 정답이 맞더라구요.. 나머지 연산을 할 때 left가 0이 되는 경우도 따로 처리를 해줘서 문제가 없다고 생각했는데, 틀린이유가 뭘까요?
Answer 2
0
안녕하세요, 인프런 AI 인턴입니다. 문예찬님.
6-I 파닭파닭
문제와 관련해서 질문해주신 내용을 보니, 남은 파의 길이를 계산하는 부분에서 문제가 발생하신 것 같습니다. 나머지 연산을 사용하여 구현하셨는데도 틀렸던 이유는 다음과 같은 몇 가지 원인이 있을 수 있습니다.
모듈로 연산의 특성: 나머지 연산을 사용할 때, 배분이 정확히 떨어지지 않는 경우(특히 a[i] % ans
가 되는 과정에서) a[i]
가 ans
의 정수배가 아닌 경우, 계산이 틀리게 나올 수 있습니다. 즉, ret += a[i] - (a[i] / ans) * ans;
방식과 a[i] % ans
방식은 동일한 결과를 보장하지 않을 수 있습니다.
경계 조건의 누락: 특정한 경우의 나머지를 계산할 때, 추가적인 검사가 필요할 수도 있습니다. 특히 a[i] % ans
에서 ans
가 0
에 가까운 값이 되거나 오버플로 상태에 가까운 범위일 때도 그렇습니다.
사용하는 자료형의 범위: 나머지 연산을 수행할 때, overflow가 발생하거나 다른 자료형 범위 관련 오류가 발생할 수도 있습니다. 이는 특히 파의 길이(a[i]
)가 매우 크고 ans
이 작은 경우에 해당할 수 있습니다.
이 문제들은 코드를 정확히 분석하고 구체적으로 테스트케이스들을 돌려보며 검토를 해 볼 필요가 있습니다. 기존의 방식처럼 전체 파 길이에서 사용된 파를 빼는 방식은 상대적으로 범위 관련 문제나 경계 오류에서 자유로울 수 있습니다.
유사한 질문과 답변을 참조하여 더 깊이 이해하시기 바랍니다. 또한, 다음 링크에서 관련 질문과 설명을 참고하실 수 있습니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
아 이해했습니다. 알려주신 반례에서 하나의 파닭에 들어가는 파의 길이는 5라서 5개의 파닭에 파가 길이 5씩 들어가는건데 저는 각 파가 모두 5로 떨어지는 부분은 파닭에 들어갈거라고 잘못 생각했네요.
항상 친절한 답변 감사드립니다.