https://www.acmicpc.net/problem/2525
현재 시간(시, 분)을 입력받고, 오븐 작동 시간(분)을 입력 받는다. 현재 시간으로부터 오븐작동이 끝났을 때의 시각을 계산하는 프로그램을 작성하라
입력: 첫째 줄에는 현재 시각이 나온다. 현재 시각은 시 A (0 ≤ A ≤ 23) 와 분 B (0 ≤ B ≤ 59)가 정수로 빈칸을 사이에 두고 순서대로 주어진다. 두 번째 줄에는 요리하는 데 필요한 시간 C (0 ≤ C ≤ 1,000)가 분 단위로 주어진다.
출력: 첫째 줄에 종료되는 시각의 시와 분을 공백을 사이에 두고 출력한다. (단, 시는 0부터 23까지의 정수, 분은 0부터 59까지의 정수이다. 디지털 시계는 23시 59분에서 1분이 지나면 0시 0분이 된다.)
예제입력:
14 30
20
예제출력:
19 0
datetime
내장함수에 시간계산이 가능한 줄 알고 조금 찾아봤는데 시작 년도가 필요한것 같았습니다. default
로 처리하고 사용해도 될 것 같지만 이 알고리즘 문제에서 요구하는 풀이 방식은 아닌 것 같아 다른 방법으로 선회하기로 결정했습니다.
hour, min = map(int, input().split())
cook_min = int(input())
last_min = min + cook_min
if last_min >= 60:
hour_count = 0
while last_min >= 60:
last_min -= 60
hour_count += 1
hour += hour_count
if hour >= 24:
hour -= 24
print(hour, last_min)
먼저 hour
, min
변수에 현재 시간을 담아옵니다. 어제는 인풋 받아오고 나중에 형변환을 했지만 오늘은 어제 깨닫게된 map
함수를 사용해 인풋과 형변환을 한번에 해결했습니다. 그리고 요리 시간을 두 번째 인풋으로 받아왔습니다.
if
문을 사용해 요리 시간과 현재 분을 합친 변수 last_min
이 60을 넘는 경우
while
문을 사용해 last_min
이 60보다 큰 동안에 반복적으로 60을 차감하고 시간 임시 저장소 hour_count
를 1씩 증가 시킵니다.
반복문이 종료되면 hour
에서 hour_count
더해주고 if
문을 한번 더 사용해 hour
가 24를 넘게되면 24를 차감하는 내용을 추가했습니다.
그 후 hour
와 last_min
을 출력했습니다.
제가 작성을 하면서도 뭔가 불필요한 부분이 너무 많지 않았나? 더 줄일 수 있지 않았나? 라는 생각이 계속해서 들었습니다.
그래서 다른 분들의 코드를 찾아보기 시작했습니다.
찾아보니 대부분 datetime
은 사용하지 않고 알고리즘을 해결했습니다. 한 개의 예시를 가져왔습니다.
a, b = map(int, input().split())
c = int(input())
d = a+((b+c)//60)
if d <= 23:
if b+c <= 59:
print(a, b+c)
else:
print(d,(b+c)%60)
else:
print(d%24,(b+c)%60)
input
까지는 저랑 동일하지만 그 밑에 적어놓은 코드들이 저와 상이한 편입니다. 반복문을 사용해 60씩 차감하는 저와 달리 60으로 나눈 몫과 나머지를 이용해 문제를 해결하셨습니다.
알고리즘의 풀이방법은 많다지만 저 보다 코드 수도 적고 좀 더 효율적인 코드라고 보고있습니다. 아직 배울 점이 더 많다는 것을 느끼고 다음에 유사한 알고리즘이 있다면 효율적인 수식을 작성해 풀어보고자 합니다.
사실 삼항연산자라고 말하는 것이 맞는건지 값변화라고 적는 것도 맞는건지 잘 모르겠습니다.
하지만 실행시켜본 결과를 적고자 이름을 지었습니다.
a = b = None
b = 'a'
print(a)
a
와 b
는 None
이다. 라고 선언을 해둔 상태에서 b
는 'a'
즉 문자열a 라고 선언했을 때 a
의 값도 따라 바뀔까요?
정답은 바뀌지 않는다
입니다. None
은 주소 값이 아니라 값 자체를 넣어주므로 초기값만 None
으로 초기화되고 b
에 넣은 값은 a
에 적용되지 않습니다.
a = b = None
b = 'a'
print(id(a))
print(id(b))
# 결과값
# 140736236121288
# 140736236520840
a = b = []
b.append(1)
print(a)
a
와 b
는 []
즉 비어있는 리스트다 라고 선언해둔 상태에서 b
에 append
함수를 사용해 1
을 집어넣으면 a는 바뀔까요?
정답은 바뀐다
입니다. 저도 처음 해봤을 때 놀랐습니다. 하지만 []
는 주소 값을 부여하는 것이므로 a
, b
가 주소 값이 같기 때문에 b
에 append
한다는 의미는 a
에도 들어간다는 의미입니다.
a = b = []
b.append(1)
print(id(a))
print(id(b))
# 출력값
# 2291804939200
# 2291804939200