이번 문제는 설명을 쭉 읽어보니 해볼만 하겠다 싶은 문제여서 도전해봤는데
약간씩 헤매는 과정을 거쳤다.
문제
일단 배열을 제외하고 영상 시간을 정수로, 다시 정수에서 문자열로 변환하는 기능이 필요했다.
그래서 Kotlin에 있는 Extension function으로 만들어보기로 했다.
나머지 로직은 풀이와 같이 보자.
풀이
먼저 getTimeInt 함수를 보자.
간단히 문자열을 ":" 기준으로 쪼갠 후
분 단위는 60을 곱하고 초 단위는 그냥 더해서 정수를 리턴해주는 함수이다.
이번에는 getTimeString 함수이다.
특이점은 한자릿수의 경우 앞에 0으로 채워주는 것이 특징이므로
String.format 함수를 사용해 포맷을 지정해주고 정수를 60으로 나눈 몫과 나머지를 각각 할당해주었다.
이제 실행되는 함수를 보자.
이 함수 안에서 시간을 계산하기에 문자열을 리턴하기 전 모든 구간의 시간 계산은 정수로 진행했다.
먼저 현재 시간을 구한다.
이제 commands의 길이만큼 반복하면서 각 command(forEach 내부의 it)를 실행한다.
문제를 다시 읽어보면 우리는 3가지 기능을 지원해주어야 한다.
(next, prev, 오프닝 건너뛰기)
하지만 실제 command는 next, prev만 존재한다.
그럼 오프닝 건너뛰기 로직은 내가 구현해야 한다는 뜻이다.
이 로직은 어떻게 해야하는걸까?
오프닝 건너뛰기 로직 생각해보기
입출력 예 2번 -> 마지막 로직 수행 시 next, prev의 경우만 처리한 경우
20초라는 결과가 나오게 된다.
그렇게 next, prev 처리 이후 오프닝 건너뛰기 로직을 추가하게 되었다.
입출력 예 3번 -> 단 하나의 로직 수행인 next를 입출력 예 2번처럼 진행 후 오프닝 건너뛰기 로직을 수행하면
4분 15초라는 결과가 나오게 된다.
따라서, next, prev 처리 이전 오프닝 건너뛰기 로직이 필요하다는 사실을 알게되었다.
다시 정리하면 next, prev 처리 전후로 오프닝 건너뛰기 로직이 필요했다.
영상 시작 혹은 종료 시간 이동 로직 생각해보기
이 로직은 위에서 고민했던 오프닝 건너뛰기 로직보다 훨씬 간단하다.
next, prev 처리 이후 현재 시간을 보고 시작 혹은 종료 시간으로 이동할 지를 결정하면 된다.
실행 결과
이번 문제는 생각보다 시간이 더 걸리긴 했지만 나름 재밌는 문제였다.
어느 정도 성취감도 있어서 더욱 좋았던 것 같다.
'프로그래머스' 카테고리의 다른 글
배열 조각하기 코틀린(Kotlin) (0) | 2024.11.12 |
---|---|
전국 대회 선발 고사 코틀린(Kotlin) (0) | 2024.11.10 |
왼쪽 오른쪽 코틀린(Kotlin) (1) | 2024.11.09 |
[PCCE 기출문제] 7번 / 버스 자바(Java) (0) | 2024.11.07 |
바탕화면 정리 코틀린(Kotlin) (0) | 2024.10.31 |