본문 바로가기

카테고리 없음

Python 100

728x90
728x90

 


문제 풀이를 했던 Python 100 문제 중,
코드의 효율성과 가독성을 개선할 필요성이 있는 두 가지 문제를 선정하여,
기존 코드와 이를 보완한 새로운 코드에 대한 각각의 설명을 작성하였다.


 

문제 1 - 24

더보기
더보기
더보기

이 코드는 현재 시간과 임무 시작 시간 간의 차이를 계산하여,

남은 시간을 시, 분, 초 형식으로 출력하는 코드이다.

# 현재 시간 입력
current_time = input().split(':')
current_hour = int(current_time[0])
current_minute = int(current_time[1])
current_second = int(current_time[2])

# 임무 시작 시간 입력
start_time = input().split(':')
start_hour = int(start_time[0])
start_minute = int(start_time[1])
start_second = int(start_time[2])

# 현재 시간
current_seconds = current_hour * 3600 + current_minute * 60 + current_second

# 임무 시작 시간
start_seconds = start_hour * 3600 + start_minute * 60 + start_second

# 남은 시간 계산
remaining_seconds = (start_seconds + 86400 - current_seconds) % 86400

# 남은 시간을 시, 분, 초로 변환
remaining_hour = remaining_seconds // 3600
remaining_minute = (remaining_seconds % 3600) // 60
remaining_second = remaining_seconds % 60

print('{:02d}:{:02d}:{:02d}'.format(remaining_hour, remaining_minute, remaining_second))

 

1. 이 코드는 먼저 두 줄의 입력을 받으며, 입력된 두 줄은 모두 콜론 (:) 구분자로 분리된다.

2. 계산을 단순화하기 위해, 현재 시간과 시작 시간을 총 '초'로 변환하였다. 

 

3. 임무의 남은 시간은, 시작 시간에 하루의 총 초 수를 추가한 다음, 현재 시간을 뺌으로써 계산된다.

이것은 임무 시작 시간이 (현재 시간보다) 나중인 경우를 고려한다. (즉, 임무가 다음 날에 시작됨)

 

4. 남은 초는 다시 시간, 분 및 초로 변환된 뒤, 남은 시간이

"HH:MM:SS" 형식으로 문자열 서식화되어 출력된다. 

 


보완된 버전

def seconds(time_str): # 시간 입력 받기 함수 (map 사용)
    hours, minutes, seconds = map(int, time_str.split(':'))
    return hours * 3600 + minutes * 60 + seconds

# 시간 출력 함수
def format_time(seconds):
    hours = seconds // 3600
    minutes = (seconds % 3600) // 60
    seconds = seconds % 60
    return '{:02d}:{:02d}:{:02d}'.format(hours, minutes, seconds)

current_time = input()
start_time = input()

# 시간들을 초 단위로 변환
current_seconds = seconds(current_time)
start_seconds = seconds(start_time)

# 남은 시간 계산 (24시간을 기준으로 순환)
remaining_seconds = start_seconds - current_seconds

# 남은 시간이 음수이면 하루를 더해 양수로 만듦
if remaining_seconds < 0:
    remaining_seconds += 86400

print(format_time(remaining_seconds))

 

1. seconds 함수는 map 함수를 사용하여 입력된 시간을 초로 변환합니다.

2. remaining_seconds가 음수일 경우, 그 값에 하루(86400초)를 더해 양수로 만든다.


문제 2 - 피보나치 수 2

 

더보기
더보기
더보기

피보나치 수열은 이전 두 개의 항을 더해서 구하는 규칙을 가지고 있다. 

이를 재귀적으로 구현한 코드이다. 

효율적인 알고리즘을 위해 중복되는 계산을 피했으며,

아래는 반복적인 방식으로 피보나치 수열을 구하는 함수이다.

N = int(input())

# 0, 1, 1, 2, 3, 5, 8...
def fibonacci(n):

# 피보나치 수 리스트 생성
    fi= [0, 1]
    
    # n = 0 또는 1일 때, 각각 0과 1을 반환
    if n == 0:
        return 0
    elif n == 1:
        return 1


     # 피보나치 수 계산
    for i in range(2, N + 1):
        fi.append(fi[i - 1] + fi[i - 2])

    return fi[N]


# 피보나치 수 출력
print(fibonacci(N))

 

1. 리스트 fi 를 사용하여 각 피보나치 수를 계산한다.

 

2. 초기값으로 fi 에 0, 1을 넣어주고, 반복문을 통해

n 번째까지의 피보나치 수를 계산하여 리스트에 저장한다.

 

3. 마지막으로 리스트에서 n번째 값을 반환하고, 주어진 숫자 n 에 해당하는 피보나치 수를 출력한다.


보완된 버전

N = int(input())

# 피보나치 수열의 N번째 항을 계산하는 함수
def fibonacci(N):

    if N == 0:
        return 0
    elif N == 1:
        return 1

    # 피보나치 수열의 첫 두 항 초기화
    a, b = 0, 1

    # 2부터 N까지 반복하여 피보나치 수 계산
    for _ in range(2, N + 1):
    
        # a는 이전 항, b는 현재 항
        a, b = b, a + b

    # N번째 피보나치 수 반환
    return b
    
print(fibonacci(N))

 

1. 리스트의 append 메서드를 사용하지 않고,

if 문과 for 문만을 활용하여 코드를 작성하였다.


 

728x90
반응형