본문 바로가기
코테

[java] [PCCP 기출문제] 1번 / 동영상 재생기

by 상똥 2024. 9. 25.
풀이
1. 모든 시간 값들을 숫자로 변환한다
- 분 단위는 * 60, 초 단위는 그대로 정수값으로 변환해 더한다

2. next, prev, skip 함수를 만들어준다
- int 형은 void를 사용해서 값을 바꿀 수 없으므로 int 형으로 반환하는 함수를 만들어 현재 시간을 수정한다
- next는 10초 후에 영상 밖으로 넘어가면 비디오 시간을, 아니면 +10 을 반환
- prev는 10초 전에 영상 밖으로 넘어가면 0을, 아니면 -10을 반환

3. 오프닝 시간 안에 있을 경우에는 무조건 skip하므로, 초기에 skip을 적용해준다
- skip을 한 번 적용한 다음 명령어를 순회해야 한다

4. 명령어를 순회한다
- next, prev에 따라 현재 시간을 조정하고
- 다음 명령어로 넘어가기 전 skip을 한 번 확인한다

5. 순회가 끝나면 XX:XX 형식으로 만들어 반환한다
- String.format(원하는 형식, 바꿀_정수값) 을 활용한다
회고
- 이런 시간 비교 문제는 <시간 * 60 * 60 + 분 * 60 초>로 바꿔줘야 계산이 편하다
- 3항 연산자를 남발했지만 코테 풀 때 편하잖아 뭐어때용ㅋ if 문 쓰면 너무 길어짐 ㅠㅠ
- String.format(원하는 형식, 바꿀_정수값) 잊지말자
코드 (접은 글)

 

더보기
import java.util.*;

class Solution {
    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        int video = change_into_int(video_len);
        int cur = change_into_int(pos);
        int op_s = change_into_int(op_start);
        int op_e = change_into_int(op_end);
                
        cur = skip_opening(cur, op_s, op_e);

        for(String command: commands) {
            cur = command.equals("next") ? next(cur, video) : prev(cur);
            cur = skip_opening(cur, op_s, op_e);
        }
        
        return String.format("%02d", cur / 60) + ":" + String.format("%02d", cur % 60);
    }
    
    private int change_into_int(String target) {
        return Integer.parseInt(target.split(":")[0]) * 60 
        	   + Integer.parseInt(target.split(":")[1]);
    }
    
    private int skip_opening(int cur, int op_s, int op_e) {
        return cur >= op_s && cur < op_e ? op_e : cur;
    }
    
    private int next(int cur, int video) {
        return cur + 10 > video ? video : cur + 10;
    }
    
    private int prev(int cur) {
        return cur - 10 < 0 ? 0 : cur - 10;
    }
}

 

'코테' 카테고리의 다른 글

[java] 프로그래머스스쿨 혼자서 하는 틱택토  (1) 2024.09.16
[java] 짝지어 제거하기  (0) 2024.01.11
[java] 귤 고르기  (1) 2024.01.11
[python] 프로그래머스스쿨 더 맵게  (0) 2023.12.14
[Java] 심화 1단계  (1) 2023.11.13