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

yseo14·2024년 10월 30일

코딩테스트 대비

목록 보기
25/88


문제 링크

현대오토에버 코딩테스트가 예정되어 있어서 연습할 겸 프로그래머스 문제를 풀기로 했다.
난이도가 백준 실버~골드4, 소프티어 3레벨, 프로그래머스 레벨2 정도라고 해서 일단 최대한 많이 풀어보는 것을 목표로..

풀이

별다른 자료구조나 알고리즘을 사용할 필요 없는 구현 문제이다.
문자열 <-> 정수 변환 정도만 알고 있으면 쉽게 풀 수 있는 문제인 거 같다.
처음 코드를 작성하고 테스트케이스를 전부 통과하지 못해서 코드를 다시보니 오프닝 구간인지 체크하는 것을 모든 명령어가 끝난 후에만 하고 있어서였다.
명령어가 입력되기 전(제일 처음 상태), 명령어가 입력된 직후를 모두 확인해주어야 한다.

코드

import java.io.*;
import java.util.*;

class Solution {
    public String solution(String video_len, String pos, String op_start, String op_end, String[] commands) {
        int video_len_sec = toSeconds(video_len);
        int pos_sec = toSeconds(pos);
        int op_start_sec = toSeconds(op_start);
        int op_end_sec = toSeconds(op_end);
        
        if(pos_sec >= op_start_sec && pos_sec <= op_end_sec){
            pos_sec = op_end_sec;
        }
        
        for(String command : commands){
                switch(command){
                case "prev":
                    if(pos_sec < 10){
                        pos_sec = 0;
                        break;
                    }
                    pos_sec -= 10;
                    break;
                case "next": 
                    if(video_len_sec - pos_sec < 10){
                        pos_sec = video_len_sec;
                        break;
                    }
                    pos_sec += 10;
                    break;
                }
            if(pos_sec >= op_start_sec && pos_sec <= op_end_sec){
            pos_sec = op_end_sec;
        }
        
        }
        
        String answer = toString(pos_sec);
        return answer;
    }
    
    public String toString(int seconds){
        int min = seconds / 60;
        int sec = seconds % 60;
        
        String minStr = String.valueOf(min);
        String secStr =  String.valueOf(sec);
        
        if(min<10){
            minStr = "0"+String.valueOf(min);
        }
        
        if(sec<10){
            secStr = "0"+String.valueOf(sec);
        }
        return minStr+":"+secStr;
    }
    
    public int toSeconds(String time){  //  문자열로 주어진 시간을 초 단위로 변환
        String[] separatedTime = new String[2];
        Integer[] separatedTimeInt = new Integer[2];
        separatedTime = time.split(":");    // ":"로 나누어 배열에 넣음

        for(int i = 0;i<separatedTime.length;i++){  
            if(separatedTime[i].startsWith("0")){   //  0으로 시작하면 0을 제거
                separatedTime[i] = separatedTime[i].substring(1);
            }
            separatedTimeInt[i] = Integer.parseInt(separatedTime[i]);
        }
        
        return separatedTimeInt[0] * 60 + separatedTimeInt[1];
    }
}

빨리 푼다는 생각으로 코드를 짜서 좀 지저분한데 다른 문제를 몇개 더 풀어보고 리팩토링을 좀 해봐야겠다.

profile
like the water flowing

0개의 댓글