개린이 탈출기

[코테연습] 동영상 재생기 본문

일상메모

[코테연습] 동영상 재생기

yooverd 2025. 3. 24. 22:44
728x90
반응형
SMALL

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

 

프로그래머스

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

programmers.co.kr

 

우선 앞으로 문제를 풀 때 제한시간을 둬야겠다.

너무 한없이 푸는 것 같아서 약간 시간 낭비가 되는 느낌,,!?

 

1. String 의 메서드를 다양하게 활용해보자.

나는 시간을 쪼갤 때, 무지성으로 substring을 활용했는데, split을 활용하는 것이 더욱 안전하고 가독성이 좋아지는 코드 같다.

 

2. 계산 기준으로 초로 잡아서 분까지 한번에 계산이 가능하다는 것! 잊지말기

왜 분따로 초따로 계산했는지 참 바보같다....ㅜ

 

내가 제출한 정답

class Solution {
    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        String answer = "";

        int vidMin = Integer.valueOf(video_len.substring(0,2));
        int vidSec = Integer.valueOf(video_len.substring(3,5));
        int opStMin = Integer.valueOf(op_start.substring(0,2)); 
        int opStSec = Integer.valueOf(op_start.substring(3,5)); 
        int opEdMin =Integer.valueOf(op_end.substring(0,2));
        int opEdSec = Integer.valueOf(op_end.substring(3,5)); 
        int ansMin = Integer.valueOf(pos.substring(0,2));
        int ansSec = Integer.valueOf(pos.substring(3,5));
        
        
        for(String command : commands) {
            // 오프닝 건너뛰기
            if(IsInOp(ansMin, ansSec, opStMin, opStSec, opEdMin, opEdSec)) {
                ansMin = opEdMin;
                ansSec = opEdSec;
            }
            
            switch(command) {
                case "next" :
                    if(nextIsAfterFin(ansMin, ansSec, vidMin, vidSec)) {
                        ansMin = vidMin;
                        ansSec = vidSec;
                    } else {
                        if(ansSec >= 50) {
                            ansMin = ansMin + 1;
                            ansSec = ansSec%10;
                        } else {
                            ansSec = ansSec + 10;
                        }
                    }
                    break;
                    
                case "prev" :
                    if(prevIsBeforeSrt(ansMin, ansSec)) {
                        ansMin = 0;
                        ansSec = 0;
                    } else {
                        if(ansSec < 10) {
                            ansMin = ansMin -1;
                            ansSec = ansSec + 50;
                        } else {
                            ansSec = ansSec -10;
                        }
                    }
                    break;
            }
        }
        
        // 오프닝 건너뛰기
        if(IsInOp(ansMin, ansSec, opStMin, opStSec, opEdMin, opEdSec)) {
            ansMin = opEdMin;
            ansSec = opEdSec;
        }
        
        return toStr(ansMin) + ":" + toStr(ansSec);
    }
    
    private boolean IsInOp(int posMin, int posSec, int opStMin, int opStSec, int opEdMin, int opEdSec) {
        if(posMin < opStMin) {
            return false;
        } else if (posMin == opStMin && posSec < opStSec) {
            return false;
        } else if (posMin > opEdMin) {
            return false;
        } else if (posMin == opEdMin && posSec > opEdSec) {
            return false;
        } else {
            return true;
        }
    }
    
    private boolean nextIsAfterFin(int posMin, int posSec, int finMin, int finSec) {
        if(posMin == finMin && posSec + 10 > finSec)  {
           return true;
        }
        else if (posSec >= 50 && posMin+1 == finMin && posSec-50 > finSec) {
                return true;
        } 
       return false;
    }
    
    private boolean prevIsBeforeSrt(int posMin, int posSec) {
        if(posMin == 0 && posSec - 10 <= 0) {
            return true;
        } else if (posSec < 10 && posMin-1 == 0) {
            return true;
        }
        return false;
    }
    
    private String toStr (int num) {
        if(num <10) {
            return "0" + String.valueOf(num);
        }
        return String.valueOf(num);
    }
    
}

 

 

 

 

728x90
반응형
LIST

'일상메모' 카테고리의 다른 글

[코테연습] 유연근무제 (이차배열)  (0) 2025.03.24
[코테연습] 택배 상자 꺼내기  (0) 2025.03.21
[코테연습]  (0) 2025.03.18
[코테연습] 2차원 배열  (0) 2025.03.16
[코테 연습] 개행문자, 나머지연산  (0) 2025.03.14