출처 : https://www.acmicpc.net/problem/25044
1. 문제 설명
대부분의 DGIST 기초학부 학생들은 기숙사에서 생활하고 있습니다. 여름이 다가옴에 따라 자유롭게 온도를 설정할 수 있는 시원한 에어컨을 사용하게 될 예정입니다. 안타깝게도 에어컨은 매일 15, 18, 21시 정각에 자동으로 꺼지게 설계되어 있습니다. 더군다나 에어컨의 내장 시계가 고장이 나서 세 번째로 꺼질 때마다 에어컨의 시계는 분간 멈추게 됩니다.
편안한 낮잠을 위해 정시에 맞춰 에어컨을 켜주는 기계를 만들어 둔 정디지 양은 정확한 시간에 에어컨이 켜지지 않자 화가 나기 시작했습니다. 정디지양이 회로이론 과제를 내주기 전에 여러분이 일째의 에어컨이 꺼지는 시각을 예측해 전원을 켜는 기계를 만들어 정디지양이 화를 내지 않도록 잘 다독여줍시다. (날짜는 0일 00시 00분부터 시작되며 에어컨은 켜져있는 상태입니다.
2. 접근 방식
구현 문제이다.
3. 주석 달기 (변수 설명, 각 줄마다 문장으로 설명, 함수 설명)
import sys
input = sys.stdin.readline
n, k = map(int, input().split())
def Int_to_String(x):
s = ""
hour = str((x // 60) % 24)
if len(hour) == 1:
s += "0"
s += hour + ":"
minute = str(x % 60)
if len(minute) == 1:
s += "0"
s += minute
return s
stop = [180, 180, 1080] # 멈출 시간
count = 0
startTime = 900 # 15:00에 처음으로 멈춤
today = n * 60 * 24 # 하루를 분 단위로 계산하기 위함
tomorrow = (n+1) * 60 * 24 #
ans = []
while startTime < tomorrow: # 멈추는 시간이 내일로 넘어간다면 탈출. 즉, 주어진 n일을 벗어난다면 탈출
if startTime >= today: # 현재 startTime은 15:00(900분)으로 맞춰져있고 today는 00:00(자정)으로 맞춰져있다.
# n = 0 일때, n일째 에어컨이 켜진 시간은 15:00 18:00 21:00 이다.
# 다시말해서 n = 1000 일때, startTime >= today라는 의미는 해당하는 n일째라는 말이다.
ans.append(startTime) # 그렇기 때문에, 해당 요일의 에어컨이 켜진 시간을 출력하기 위해 ans에 넣어준다.
startTime = startTime + stop[count % 3]
if count % 3 == 2: # 3번째로 꺼질 때마다
startTime += k # k를 더해준다.
count += 1
print(len(ans))
for i in ans:
print(Int_to_String(i))
4. 분석
1. Time : O(n)
2. Space :
3. 소요시간 : 1시간
4. 제출 횟수 (무작정 제출하기 않기) : 5회
5. 어려웠던 부분과 해결한 방법 : 아이디어는 쉬웠는데 구현이 제대로 되지 않아 애먹었다.... ㅠㅠ 꾸준히 연습하자.
6. 실수가 줄어들었는가 ?