본문 바로가기

CS/알고리즘

시간 계산하기(손코딩)

수정전 ver1

public class Time {
    public static void main(String[] args) {
        System.out.println(solution("23:55:45","07:03"));
    }
    public static int cal(String time){
        char[] arr = time.toCharArray();
        int sum = 0;
        sum += Integer.parseInt(arr[0])*10*3600;
        sum += Integer.parseInt(arr[1])*3600;
        sum += Integer.parseInt(arr[3])*10*60;
        sum += Integer.parseInt(arr[4])*60;
        sum += Integer.parseInt(arr[6])*10;
        sum += Integer.parseInt(arr[7]);
        return sum;
    }

    public static String solution(String time1, String time2){
        int result = cal(time1)+cal(time2);
        int hour = result/3600;
        int min = (result%3600)/60;
        int sec = (result%3600)%60;
        return hour+":"+min+":"+sec;
    }
}

Integer.parseInt()는 String을 정수 타입으로 변환할 때 사용가능하다.

따라서 arr[0]을 String으로 변환해줌.

 

public static int cal(String time){
    char[] arr = time.toCharArray();
    int sum = 0;
    sum += Integer.parseInt(String.valueOf(arr[0]))*10*3600;
    sum += Integer.parseInt(String.valueOf(arr[1]))*3600;
    sum += Integer.parseInt(String.valueOf(arr[3]))*10*60;
    sum += Integer.parseInt(String.valueOf(arr[4]))*60;
    sum += Integer.parseInt(String.valueOf(arr[6]))*10;
    sum += Integer.parseInt(String.valueOf(arr[7]));
    return sum;
}

 

완성한 클래스

 

public class Time {
    public static void main(String[] args) {
        System.out.println(solution("23:55:45","00:07:03"));
    }
    
    // 문자열 -> 초 계산 메소드
    public static int cal(String time){
        char[] arr = time.toCharArray();
        int sum = 0;
        sum += Integer.parseInt(String.valueOf(arr[0]))*10*3600;
        sum += Integer.parseInt(String.valueOf(arr[1]))*3600;
        sum += Integer.parseInt(String.valueOf(arr[3]))*10*60;
        sum += Integer.parseInt(String.valueOf(arr[4]))*60;
        sum += Integer.parseInt(String.valueOf(arr[6]))*10;
        sum += Integer.parseInt(String.valueOf(arr[7]));
        return sum;
    }

    // 시간 더하는 메소드
    public static String solution(String time1, String time2){
        int result = cal(time1)+cal(time2);
        int hour = result/3600;
        if(hour>=24){
            hour-=24;
        }
        int min = (result%3600)/60;
        int sec = (result%3600)%60;
        StringBuilder sb = new StringBuilder();
        if(hour<10)
            sb.append(0);
        sb.append(hour);
        sb.append(":");
        if(min<10)
            sb.append(0);
        sb.append(min);
        sb.append(":");
        if(sec<10)
            sb.append(0);
        sb.append(sec);

        return sb.toString();
    }
}

ver2.

아스키코드를 이용하여 char타입에서 int타입으로 변환해줌

아스키코드48 == 숫 0; (49==1; 50==2;....)

 

public static int cal(String time){
    char[] arr = time.toCharArray();
    int sum = 0;
    sum += (arr[0]-48)*10*3600;
    sum += (arr[1]-48)*3600;
    sum += (arr[3]-48)*10*60;
    sum += (arr[4]-48)*60;
    sum += (arr[6]-48)*10;
    sum += (arr[7]-48);
    return sum;
}

 

최종버전

public class Time {
    public static void main(String[] args) {
        System.out.println(solution("23:55:45","00:07:03"));
    }

    // 문자열 -> 초 계산 메소드 (아스키코드로 char -> int 변환)
    public static int cal(String time){
        char[] arr = time.toCharArray();
        int sum = 0;
        sum += (arr[0]-48)*10*3600;
        sum += (arr[1]-48)*3600;
        sum += (arr[3]-48)*10*60;
        sum += (arr[4]-48)*60;
        sum += (arr[6]-48)*10;
        sum += (arr[7]-48);
        return sum;
    }

    // 시간 더하는 메소드
    public static String solution(String time1, String time2){
        int result = cal(time1)+cal(time2);
        int[] tArr = new int[3];
        tArr[0] = result/3600; //hour
        if(tArr[0] >=24){
            tArr[0] -=24;
        }
        tArr[1]  = (result%3600)/60; //min
        tArr[2]  = (result%3600)%60; //sec

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i<tArr.length;i++){
            if(tArr[i]<10)
                sb.append("0");
            sb.append(tArr[i]);
            if(i!=tArr.length-1)
                sb.append(":");
        }
        return sb.toString();
    }
}

ver 3

split 메소드를 이용해서 ":"을 기준으로 시간 자르기

* Integer.parseInt("07") == 7; 를 수행함. 00 신경 안써도 됨.

public static int cal(String time){
    String[] arr = time.split(":");
    int sum = Integer.parseInt(arr[0])*3600;
    sum += Integer.parseInt(arr[1])*60;
    sum += Integer.parseInt(arr[2]);
    return sum;

 

완성된 클래스

/*
※ 손으로 풀고 깃허브에 옮겨 적어주세요
(풀이시간10분~15분 제한)

기준 시간이 존재하고, 추가할 시간을 나타내는 인자가 주어지면 그것을 더해 시간을 나타내는 메소드를 만들어주세요.
예시) 현재 시간은 23:55:45입니다. 이때 00:07:03이 주어지면
00:02:48 로 리턴하는 메소드를 만들어주세요. (단, DecimalFormat,SimpleDateFormat은 사용할 수 없습니다.)
*/

public class Time {
    public static void main(String[] args) {
        System.out.println(solution("23:55:45","00:07:03"));
    }

    // 문자열 -> 초 계산 메소드 (아스키코드로 char -> int 변환)
    public static int cal(String time){
        String[] arr = time.split(":");
        int sum = Integer.parseInt(arr[0])*3600;
        sum += Integer.parseInt(arr[1])*60;
        sum += Integer.parseInt(arr[2]);
        return sum;
        
    }

    // 시간 더하는 메소드
    public static String solution(String time1, String time2){
        int result = cal(time1)+cal(time2);
        int[] tArr = new int[3];
        tArr[0] = result/3600; //hour
        if(tArr[0] >=24){
            tArr[0] -=24;
        }
        tArr[1]  = (result%3600)/60; //min
        tArr[2]  = (result%3600)%60; //sec

        StringBuilder sb = new StringBuilder();
        for(int i = 0; i<tArr.length;i++){
            if(tArr[i]<10)
                sb.append("0");
            sb.append(tArr[i]);
            if(i!=tArr.length-1)
                sb.append(":");
        }
        return sb.toString();
    }
}

 

'CS > 알고리즘' 카테고리의 다른 글

게임개발 구현 문제풀이(좌표값 이동)  (0) 2023.11.05
하노이의 탑  (0) 2023.10.27
재귀함수와 반복문의 차이점  (0) 2023.10.19
소수 구하기  (0) 2023.10.03
중앙값 구하기  (0) 2023.09.20