공부 스토리/Programming / / 2020. 10. 28. 22:17

[이것이 코딩 테스트다 with Python] 그리디 알고리즘 기출풀이 - 곱하기 혹은 더하기

목차

    반응형

    내 풀이

    """
    ### 동빈나 <이것이 코딩테스트다> 기출 문제
    ## 그리디 알고리즘 - 2. 곱하기 혹은 더하기
    
    # 난이도 '하' / 시간제한 1초 / 메모리 제한 128MB / 기출: Facebook 인터뷰
    # 풀이 시간제한: 30분
    """
    
    """
    S: 여러 개의 숫자로 구성된 하나의 문자열 (0-9)
    
    Result: * 또는 + 연산자를 숫자 사이에 넣어 가장 큰 수를 구하는 프로그램 (무조건 왼->오 순서로만 연산)
    """
    import time
    from collections import deque
    
    start_time = time.time()    # 시간 측정 시작
    
    S = deque(list(map(int, input())))
    result = S.popleft()    # 가장 첫 수는 미리 넣어두기
    
    while S:
        num = S.popleft()
    
        # 연산을 진행할 숫자 두 개가 0 또는 1 값을 가질 경우, + 연산으로 더 큰 수를 만들 수 있음
        if (result <= 1) or (num <= 1):
            result += num
        else:   # 그 외 숫자는 모두 곱셈
            result *= num
    
    print(result)
    
    end_time = time.time()  # 시간 측정 종료
    print("프로그램 수행 시간: ", end_time - start_time)    # 수행 시간 출력
    

    테스트 케이스 및 수행 시간

    Input: 02984
    Answer: 576

    - 내 풀이 수행시간: 약 2.4초

    - 책에 수록된 정답 수행시간: 약 2.1~2.5초

    풀이 설명

    - 대부분의 숫자 연산은 곱하기가 더하기보다 큰 결과를 나타냄

    - 하지만, 0을 곱하면 결과가 0이 나오고, 1을 곱하면 자기 자신이 나옴. 그렇기 때문에, 0 또는 1과 연산을 할 경우에는 곱셈보다 덧셈을 해주는 것이 이득

    - 이 부분에 대한 예외처리를 제외한 나머지 숫자는 모두 곱셈 연산을 진행하면 됨

    반응형
    • 네이버 블로그 공유
    • 네이버 밴드 공유
    • 페이스북 공유
    • 카카오스토리 공유