프로그래머스

[프로그래머스] [PCCP 기출문제] 1번 / 동영상 재생기 (JAVA)

코 밑 2024. 12. 22. 21:38
Contents

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

 

프로그래머스

SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프

programmers.co.kr

 

 

테스트 케이스가 제대로 안돼있어서 좀 헤멨다;;; 제대로좀 써놓지 씹련들;;

그래서 질문목록도 찾아보고 테스트 케이스를 좀 더 찾아봤다

 

문제 설명

동영상 재생기가 있는데 앞뒤 10초 이동 가능하다

오프닝은 알아서 건너뛰어진다

00:00 이하, 동영상의 최대 길이 이상은 갈 수 없다

오프닝 시작시간 ~ 오프닝 종료시간 사이에 가면 오프닝 종료시간으로 간다

 

만약 현재 위치가 오프닝 사이고 next를 입력받으면?

오프닝 종료시간 + 10을 반환한다

 

// 프로그래머스 동영상 재생기
// 동영상 재생기의 기능은 10초 전(prev)후(next)로 이동, 오프닝 건너뛰기
// 오프닝 건너뛰기는 자동
// video_len : 동영상의 길이, pos : 기능이 수행될 때의 재생위치, op_start, op_end : 오프닝 시작, 끝나는
// 시간, commands : 사용자의 입력
// 입력이 모두 끝난 뒤 동영상의 위치 반환
class Solution {
    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        String answer = pos;

        // 현재 위치가 오프닝 구간이면 엔딩으로 감
        if (minToSec(answer) >= minToSec(op_start) && minToSec(answer) <= minToSec(op_end)) {
            answer = op_end;
        }

        for (int i = 0; i < commands.length; i++) {
            int sec = minToSec(answer);

            // 후로 이동
            if (commands[i].equals("next")) {
                sec += 10;

                // 동영상 총 길이보다 길면 안됨
                if (sec > minToSec(video_len))
                    sec = minToSec(video_len);

            }
            // 전으로 이동
            if (commands[i].equals("prev")) {
                sec -= 10;

                // 음수 방지, 0보다 작아지면 0으로
                if (sec < 0)
                    sec = 0;

            }

            // 오프닝 구간에 겹치면 엔딩으로 감
            if (sec >= minToSec(op_start) && sec <= minToSec(op_end)) {
                sec = minToSec(op_end);
            }

            answer = secToMin(sec);
        }

        return answer;
    }

    // 초 -> 분:초
    // 초 합계에서 60으로 나눔
    // 몫은 분, 나머지는 초로 반환
    public String secToMin(int sumSec) {
        int min = sumSec / 60;
        int sec = sumSec % 60;

        // 한자리일 때 앞자리 0 살리기
        String strmin = (min < 10) ? "0" + min : Integer.toString(min);
        String strsec = (sec < 10) ? "0" + sec : Integer.toString(sec);

        return strmin + ":" + strsec;
    }

    // 분:초 -> 초
    // :로 앞뒤 자르면 0번에는 분, 1번에는 초가 들어감
    // 분에는 *60, 초를 더해주고 초 반환
    public int minToSec(String min) {
        String[] time = min.split(":");

        return Integer.parseInt(time[0]) * 60 + Integer.parseInt(time[1]);
    }
}

 

https://velog.io/@ghkddlscks19/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EC%8A%A4JAVA-PCCP-%EA%B8%B0%EC%B6%9C%EB%AC%B8%EC%A0%9C-1%EB%B2%88-%EB%8F%99%EC%98%81%EC%83%81-%EC%9E%AC%EC%83%9D%EA%B8%B0

 

[프로그래머스/JAVA] PCCP 기출문제 1번 동영상 재생기

https://school.programmers.co.kr/learn/courses/30/lessons/340213당신은 동영상 재생기를 만들고 있습니다. 당신의 동영상 재생기는 10초 전으로 이동, 10초 후로 이동, 오프닝 건너뛰기 3가지 기능을 지원합니다

velog.io

이분 코드 미친 개간단하고 보기도 편하다;; 벽을 느껴버림;

 

pccp 문제가 적당히 난이도 있고 서사가 있으니까 재미도 있다

다음에 또 돌아오겠음.

 

요즘 눈들 많이 오든데 조심들 하슈