반응형
밑의 링크는 CodeUp에서의 문제 링크입니다.
문제는 링크를 통해서 직접 봐주시길 바랍니다.
주의해야 할 점
1. map 함수 사용
이 문제에서 사용한 map을 사용하는 입력 방식은 정말 많이 사용하는 입력 방식입니다.
이해하고 거의 외운 것 마냥 써봅시다.
2. 24시간 기준
입력하는 시의 범위가 0 ~ 23인 것을 보면 24시간을 기준으로 하는 시간 단위인 것 같습니다.
3. 시, 분, 초 중 가장 작은 단위로 맞추고 처리하기
시간 관련 알고리즘 문제를 풀 때는 시, 분, 초 중
문제에서 고려하는 가장 작은 단위로 시간을 합산하고 문제에 맞게 처리한 뒤,
다시 시, 분, 초로 표현하는 방법이 제일 깔끔한 것 같습니다.
이 기법은 후기를 작성한 밑의 포스팅 링크에서 설명하고 있는
'그림으로 배우는 알고리즘 Algorithm Basic'이라는 책에서 처음 배웠습니다.
4. 문제에서의 금지 키워드
이번 문제는 조건문에 해당하는 키워드들인 if, ?(삼항 연산자), switch를 사용하면 안됩니다.
다만, 파이썬에는 원래 switch문이 없습니다.
저는 이번 문제와 금지 키워드 있고 없고의 차이인 바로 앞 문제 1173번 문제를 풀 때는 if문을 사용했었는데
이 문제에서는 조건문을 사용하지 않고 푸는 방법을 생각하기 위해 좀 더 머리를 굴렸습니다.
생각한 풀이 과정
- readline을 사용하기 위해 import 합니다.
- 0 ~ 23인 시와 0 ~ 59인 분을 공백으로 구분해 입력합니다. 각각 정수형으로 변환하고, 변수 hour, minute에 넣어줍니다.
- 입력한 시에 24를 더하고 그 값에 60을 곱한 뒤, 입력한 분에 더해 분 단위로 시간을 맞춘 뒤 변수 time_sum에 저장합니다. 입력한 시에 24를 더한 이유는 입력한 시가 0이고, 분이 30 미만일 경우, if문 같은 금지 키워드를 사용하지 않고 23시 몇 분 형태로 출력해야하기 때문입니다.
- 변수 time_sum의 값에 30을 빼 30분 전의 시간을 구하고 변수 before_30_time에 저장합니다.
- 변수 before_30_time의 값에 60을 나눈 후의 몫을 구하고 그 값에 24로 나눈 나머지를 계산해 30분 전 시간의 '시' 부분을 구하고 변수 before_30_hour에 저장합니다.
- 변수 before_30_time의 값에 60을 나눈 후의 나머지인 30분 전 시간의 '분' 부분을 구하고 변수 before_30_minute에 저장합니다.
- 30분 전의 시간의 시와 분인 before_30_hour, before_30_minute의 값을 공백으로 구분해 출력합니다.
제출한 파이썬 코드
# readline을 사용하기 위해 import합니다.
from sys import stdin
# 0 ~ 23인 시, 0 ~ 59인 분을 공백으로 구분해 입력합니다.
# 각각 정수형으로 변환합니다.
hour, minute = map(int, stdin.readline().split())
# 입력한 시에 24를 더하고 60을 곱한 뒤, 입력한 분을 더해 분 단위로 맞춘 시간을 계산하고 변수에 저장합니다.
# 입력한 시에 24를 더한 이유는 입력한 시가 0, 분이 30 미만일 경우, if문 같은 금지 키워드를 사용하지 않고
# 23시 몇 분으로 되돌아가야하기 때문입니다.
time_sum = (hour + 24) * 60 + minute
# 분 단위의 총 시간에 30을 빼 30분 전의 시간을 구하고 변수에 저장합니다.
before_30_time = time_sum - 30
# 30분 전의 총 시간에서 60으로 나눈 몫을 구하고 그 값에 24로 나눈 나머지를 계산해 30분 전의 시 부분을 구하고 변수에 저장합니다.
before_30_hour = before_30_time // 60 % 24
# 30분 전의 총 시간에서 60으로 나눈 나머지를 구해 30분 전의 분 부분을 구하고 변수에 저장합니다.
before_30_minute = before_30_time % 60
# 30분 전의 시, 분을 공백으로 구분해 출력합니다.
print(before_30_hour, before_30_minute)
제출 결과
느낀 점
코딩 테스트에서는 문제를 푸는 사람들이 얼마나 알고 있는지 그리고 알고 있는 지식들을 얼마나 잘 활용하는지를
테스트 하기 위한 목적이 크므로 딱히 특별한 문법이나 키워드에 관해서 제한을 두는 사례는 거의 없었습니다.
제가 문제를 풀어본 백준이나 프로그래머스에서도 그렇고요.
그런데 코드업에서는 이번 문제처럼 한 번씩 금지 키워드를 설정해놓은 문제들이 있네요.
처음 마주치면 꽤나 당황스럽습니다. 😓😓
※ 궁금한 부분, 이상한 점 및 오타는 댓글에 부탁드립니다.
※ 더 효율적이고 빠른 정답을 환영합니다.
※ 공감 버튼❤과 구독 버튼도 잊지 말고 꾹 눌러주시면 감사하겠습니다~👍👍
반응형
댓글