yjkim9591   1년 전

확인해보니까 while문쪽에서 n값이 커질수록 연산 수가 커져서 100000이상부터 테스트할때 시간초과가 뜹니다.

제가 문제를 푼 방법은 n부터 1까지 for문으로 곱하면서 1개 곱할때마다 1의 자리수부터 있는 0은 때어내고, 0이 아닌 값이 있는 자리수부터 6자리수만 살려서 (그 이상의 자리수는 답에 영향을 안주므로 무시, 5자리수로 할 경우 0XXXX이런식으로 값이 나와야하는 경우에 XXXXX이런 식으로 출력하므로 6자리수로 설정) for문을 반복합니다.

근데 문제는 while문에서 시간초과가 발생합니다.
while문 내부를 손대서 줄일 방법으로 떠오르는게 10이 아니라 100으로 나누고, 나눠지면 10으로도 나눠지는지 테스트 하는 방법이 있을 것 같은데, 그래도 시간초과가 뜰 것 같습니다.

혹시 아예 알고리즘 자체가 잘못된건지, 아니면 조금만 수정해서 정답을 낼 수 있는 방법이 있는지 알려주시면 감사하겠습니다.

seico75   1년 전

접근 방법은 맞으나 n 이 0이 되는 경우가 생기면 8라인에서 무한루프에 빠지게 되는 것 같습니다.

0제거 -> 곱하고 -> 자리수 정리 

하면 곱할때 0이 6개 이상이 나오는 경우가 생기는 것 같고...

곱하고 -> 0제거 -> 자리수 정리하면 

이런 경우는 피할 수 있지 않나 합니다.

그리고 12라인에서 0 여섯개로는 숫자가 짤리는 경우가 생겨서 더 큰 값을 써야할 것 같고..

출력시에 0을 앞에 붙이는 방법은

printf("%05lld", n); 

하시면 됩니다.

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