[풀이]
단순 구현 문제로 문제 조건만 잘 맞추고 문자열을 잘 다뤄주면 된다.
나는 우선 시간들을 convertTime 함수를 통해 int형으로 바꿔놓고 시작했다.
시간 string을 읽어와 분/초를 분리한뒤 {60*분 + 초}를 사용해 int형으로 계산했다.
이를 기반으로 commands의 작업들으 수행했는데
1. check_opening을 통해 현재 시간이 opening 구간에 존재하는지 판단
2. prev, next 인지에 따라 시간 계산하도록 구현했다.
위의 과정을 반복하며 현재 시간을 계산한 뒤
convertTimeToString 함수를 통해 현재 시간을 다시 mm:ss 타입의 String으로 변환하도록 하였다.
String.format 함수를 사용하여 문자열의 형식을 지정해줬다.
[코드]
class Solution {
static int cur_pos;
public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
int video_len_int = convertTime(video_len);
int op_start_int = convertTime(op_start);
int op_end_int = convertTime(op_end);
cur_pos = convertTime(pos);
for (String command : commands) {
check_opening(op_start_int, op_end_int);
if(command.equals("prev")) move_prev();
else move_next(video_len_int);
}
check_opening(op_start_int, op_end_int);
return convertTimeToString();
}
public static void move_prev() {
if(cur_pos - 10 <= 0) cur_pos = 0;
else cur_pos -= 10;
}
public static void move_next(int end_time) {
if(cur_pos + 10 >= end_time) cur_pos = end_time;
else cur_pos += 10;
}
public static int convertTime(String time) {
String[] parts = time.split(":");
int min = Integer.parseInt(parts[0]); // 분
int sec = Integer.parseInt(parts[1]); // 초
return 60 * min + sec;
}
public void check_opening(int op_start, int op_end) {
if(op_start <= cur_pos && op_end >= cur_pos){
cur_pos = op_end;
}
return;
}
// mm:ss 형식의 문자열로 변환
public static String convertTimeToString() {
int minutes = cur_pos / 60;
int seconds = cur_pos % 60;
String formattedTime = String.format("%02d:%02d", minutes, seconds);
return formattedTime;
}
}
[문제]
https://school.programmers.co.kr/learn/courses/30/lessons/340213
'알고리즘 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 도넛과 막대 그래프 (JAVA) (0) | 2024.12.09 |
---|---|
[프로그래머스] 가장 많이 받은 선물 (JAVA) (2) | 2024.12.08 |
[프로그래머스] 하노이의 탑 (JAVA) (0) | 2024.12.08 |
[프로그래머스] 뉴스 클러스터링 (C++) (0) | 2022.09.06 |
[프로그래머스] 성격 유형 검사하기 (C++) (0) | 2022.08.25 |