해결된 질문
작성
·
53
·
수정됨
0
안녕하세요 선생님 🙂
이번 강의에서도 좋은 아이디어를 배워간 것 같습니다. 정말 감사합니다 ^^
너무 좋은 코드라 이것저것 뜯어보면서 테스트를 해봤는데요, 몇 가지 이해가 되지 않는 부분이 있어서 질문 드립니다.
go함수의 조건문에서 if와 else if가 헷갈립니다.
if (n % 3 == 0 && dp[n] == (dp[n / 3] + 1)) func(n / 3);
else if (n % 2 == 0 && dp[n] == (dp[n / 2] + 1)) func(n / 2);
else if (n - 1 != 0 && dp[n] == (dp[n - 1] + 1)) func(n - 1);
if문 안에서 조건 처리를 전부 해주었기 때문에 else if가 아닌 if문을 사용해도 될 것이라고 생각했습니다. 하지만 테스트케이스에 2를 넣었을 때, 2 1 1이 출력되더라구요. 무엇때문에 이렇게 출력이 되는지 알려주시면 정말 감사하겠습니다!
go함수의 탈출 조건을 없애도 정답 처리가 됩니다.
if (here == 0) return; 을 없애도 정답 처리가 됩니다. n이 0이 될 수 있는 방법이 없기 때문에 문제가 없는 것 같습니다.
코드가 한 줄밖에 안돼서 성능 차이는 없고 이런 것까지 질문하냐고 생각하실 수도 있지만, 만약 프로젝트에서 이러한 코드가 계속해서 누적이 된다면 성능에 영향을 미칠 수도 있겠다 싶더라구요. 제 생각이 맞는지 궁금해서 여쭤봅니다..!!
go함수의 조건문 안에서 괄호를 쳐주신 이유가 궁금합니다.
http://boj.kr/0c7fd72a3f0c4f6bbe386755e7845c39
별다른 이유 없이 습관적으로 치셨을 수도 있겠지만, 조건문 안의 괄호를 빼면 시간이 4ms이 아닌 8ms로 되는 것을 볼 수 있습니다.
간헐적으로 발생한 문제일 수도 있겠지만 테스트를 몇 번 해봤는데도 계속 8ms로 나오더라구요. 혹시 조건문 안의 괄호가 시간복잡도와 연관이 있는 것인지 궁금합니다!!
답변 2
1
안녕하세요 유태님 ㅎㅎ 이제 7주차라니 얼마 남지 않았네요 ㅎㅎ
if문 안에서 조건 처리를 전부 해주었기 때문에 else if가 아닌 if문을 사용해도 될 것이라고 생각했습니다. 하지만 테스트케이스에 2를 넣었을 때, 2 1 1이 출력되더라구요. 무엇때문에 이렇게 출력이 되는지 알려주시면 정말 감사하겠습니다!
elseif는 단 한번만 실행됩니다. if문을 연속으로 하게 되면 -> 두번 이상 작동 될 수 있습니다. here이 2 일 때
if(here % 2 == 0 && dp[here] == (dp[here / 2] + 1))go(here / 2);
if((here - 1 >= 0) && (dp[here] == (dp[here - 1] + 1))) go(here - 1);
if문 두개가 만족 -> 호출이 되게 됩니다.
go함수의 탈출 조건을 없애도 정답 처리가 됩니다.
-> 0이 되었을 때 if문을 모두 만족시키지 않아서 리턴되어 정답이 되는 것 같습니다. 이 문제에서는 이 코드를 없앤다고 해서 -> 문제가 되지는 않습니다만... 보통의 재귀함수는 기저사례가 있어야 하기 때문에 그냥 기저사례 넣는게 좋을 것 같습니다.
계속 8ms로 나오더라구요. 혹시 조건문 안의 괄호가 시간복잡도와 연관이 있는 것인지 궁금합니다!!
-> 없습니다. 백준에서 같은 코드 제출해도 다르게 나올 때도 있습니다. ㅎㅎ 그래도 이런 섬세한 부분 까지 고려하시는 부분은 좋은 태도입니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴입니다.
한유태님께서 질문해주신 내용에 대해 이전에 유사한 질문이 있었습니다. 비슷한 내용을 다룬 기존 답변을 통해 질문에 대한 이해를 도울 수 있는 링크를 포함하여 설명드리겠습니다.
유사한 질문과 답변을 확인해보세요:
- 1주차 문제로 연습하는 시간복잡도 Q3 질문 있습니다!
-
이 답변에서는 각 조건문의 정확성과 시간복잡도에 관련하여 자세한 설명을 제공하고 있습니다.
관련 링크를 참고하세요:
- 4-B 재귀함수 질문 있습니다
여기에서는 재귀함수와 관련된 사례로 탈출 조건의 유무가 프로그램 실행에 어떻게 영향을 미치는지 설명하고 있습니다.
유사한 질문 링크:
- 4-B 질문있습니다 :)
해당 질문에서 강사님께서 조건문 안의 코드 스타일과 그에 따른 실행 시간 차이에 대해 다룬 내용을 참고하시기 바랍니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.