duckracoon   4년 전

(실수로 문제설명을 안했네요. 숫자가 주어지면(int num) 모든 숫자는 짝수일땐 2로 나누고 홀수일떈 3을 곱한 후 1을 더하는 방식으로 반복하면 언젠가 1이 되는데 이런 연산을 몇번이나 해야지만 1이 나오는지를 answer에 담아 출력하는 함수를 만들어야합니다. 이때 연산횟수가 500회가 넘어가면 -1을 리턴해야 합니다. 예를 들어 num=6이면 6->3->10->5->16->8->4->2->1 로 answer=8입니다.)


다른 예시는 다 풀어지는데 연산횟수가 500회가 넘어갈때 -1 리턴하는 게 (if(answer==500) return -1;)

시간초과가 됩니다. 

시간을 줄이기 위해 어떡해야할까요?

#include<stdbool.h>이 주어져있었는데 이용할 수 있나요??

이용하지 않고도 방법이 있을까요? 

evenharder   4년 전

3n+1 문제를 풀고 계신 것 같긴 한데, 어떤 상황에서 무슨 문제를 풀고 있고 요구사항은 무엇인지 명확히 서술해주셔야 추가적인 답변을 해드릴 수 있습니다. 코드만 올려서는 500이라는 조건이 왜 있고, 시간초과는 뭔 시간초과인지 알 수가 없습니다.

duckracoon   4년 전

깜박했네요 죄송합니다. 문제 설명을 추가했습니다.

evenharder   4년 전

아마 num이 overflow가 일어나서 시간 초과가 발생하는 것 같습니다. num이 int 범위여도 계산 도중에 int를 넘어갈 수 있기 때문입니다.

내부적으로 num을 long long등의 64비트 변수로 관리해보시는 게 좋을 듯 합니다. long long 범위를 안 넘어가는 게 확실하지는 않지만 C 환경에서는 이게 최선이기 때문입니다.

댓글을 작성하려면 로그인해야 합니다.