강의로 돌아가기
먹는거야?

입력으로 1이 입력될때 어떤 결과가 맞는건가요? (테스트케이스 13번 오류?)

아래 코드에서 solution1( )과 solution2( )는 입력이 1일때만 차이를 줬습니다.
solution1(1) = 0 , solution(1) = 3 으로 solution1( )은 모든 테스트케이스를 통과했고 solution2( )는 테스트케이스 13번에서만 오류가 납니다.
이걸로 보면 테스트 케이스 13번은 입력은 1 결과는 0인것이 확실해보이는데..
문제의 조건으로 보면 입력된 1이 홀수이니 1->4->2->1을 거쳐 결과가 3인것이 맞지 않나요?
입력된 값이 1인 경우 목표값과 같기때문에 특별취급하여 콜라츠 연산을 거치지 않고 바로 결과로 가는건 조건에 없는것같은데요....

문제 지문
1937년 Collatz란 사람에 의해 제기된 이 추측은, 입력된 수가 짝수라면 2로 나누고, 홀수라면 3을 곱하고 1을 더한 다음, 결과로 나온 수에 같은 작업을 1이 될 때까지 반복할 경우 모든 수가 1이 된다는 추측입니다.

위 지문에 따르면 일단 입력된 수로 콜라츠연산을 한 다음, 결과로 나온 수가 1 인지를 판단하는게 맞아 보입니다.

def solution1(num):
    if num != 1:
        for counter in range(1, 501):
            num = num * 3 + 1 if num % 2 else num / 2
            if num == 1:
                break
        else:
            if num != 1:
                counter = -1
        answer = counter
    else:
        answer = 0
    return answer
def solution2(num):
    for counter in range(1, 501):
        num = num * 3 + 1 if num % 2 else num / 2
        if num == 1:
            break
    else:
        if num != 1:
            counter = -1
    answer = counter
    return answer
solution1(1)     # 결과는 0, 테스트케이스13번 성공
solution2(1)     # 결과는 3, 테스트케이스 13번만 실패
1 개의 답변
Demi

좋은 지적 감사합니다. 지문을 맞게 수정하겠습니다.

  • 서완길
    아직 수정이 안된건가요?? 결과 3인데 통과가 안되요 ㅜㅜ 서완길 2018.08.24 19:44
  • Demi
    지문에 1이 들어올 경우, 1을 리턴해야한다고 적어놨어요~ Demi 2018.08.24 21:26
답변 쓰기
이 입력폼은 마크다운 문법을 지원합니다. 마크다운 가이드 를 참고하세요.