요구사항

동영상 재생기에서 사용자의 입력값이 모두 끝난 후 현재 영상의 위치(시간)를 "mm:ss" 형식으로 나타내기

 

 

입력 값

String video_len 재생 동영상 총 길이 - "mm:ss" 형식
String pos 재생 시작 시간 - "mm:ss" 형식
String op_start 오프닝 구간 시작 시간 - "mm:ss" 형식
 - op_start현재 재생 위치op_end 인 경우 오프닝 종료 시간으로 이동 됨
String op_end 오프닝 구간 종료 시간 - "mm:ss" 형식
 - op_start   현재 재생 위치 op_end 인 경우 오프닝 종료 시간으로 이동 됨
String[] commands 사용자의 입력 값을 담은 1차원 문자열 배열 (원소는 "prev" 또는 "next")
 - "prev"는 10초 전으로 이동
 - "next" 는 10초 후로 이동

 

 

풀이

1. 시간 비교 및 계산을 위해 "mm:ss" 형식의 문자열 시간을 숫자( 분*60 + 초 )로 변환

 

2. 재생 시작 시간이 오프닝 구간에 포함되어 있는지 확인

   -> 오프닝 구간에 포함되어 있다면 현재 재생 시간 = 오프닝 종료 시간 으로 변경

 

3. 사용자 입력 값( prev/next )에 따라 현재 재생 시간을 10초 더하거나 뺌

   -> 계산한 결과가 동영상 총 길이를 초과하는 경우 현재 재생 시간 = 동영상 길이 로 변경

   -> 계산한 결과가 0초보다 적은 경우 현재 재생 시간 = 0 으로 변경 
   -> 오프닝 구간에 포함되어 있다면 현재 재생 시간 = 오프닝 종료 시간 으로 변경

 

4. 현재 재생 시간(초)을 "mm:ss" 형식 문자열로 변환하여 return

 

728x90

 

Java 코드

class Solution {
    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        String answer = "";
        
        int videoTime = getTime(video_len);
        int posTime   = getTime(pos);
        int opsTime   = getTime(op_start);
        int opeTime   = getTime(op_end);
        
        if(posTime >= opsTime && posTime < opeTime) posTime = opeTime;
        
        for(String command : commands) {
            posTime += command.equals("next")? 10 : -10;
            
            if(posTime > videoTime)                     posTime = videoTime;
            if(posTime < 0)                             posTime = 0;
            if(posTime >= opsTime && posTime < opeTime) posTime = opeTime;
        }
        
        answer = getTimeStr(posTime);
        return answer;
    }
    
    // "mm:ss" 형식 문자열 -> 숫자(sec) 변환
    private int getTime(String timeStr) {
        return Integer.parseInt(timeStr.split(":")[0]) * 60 + Integer.parseInt(timeStr.split(":")[1]);
    }
    
    // 숫자(sec) -> "mm:ss" 형식 문자열 변환
    private String getTimeStr(int time) {
        return ((time / 60) < 10? "0" : "") + (time / 60)
                + ":"
                + ((time % 60) < 10? "0" : "") + (time % 60);
    }
}

 

 

 

문제 출처

https://school.programmers.co.kr/learn/courses/30/lessons/340213

728x90
반응형

+ Recent posts