목표
자연수 N을 오름차순과 내림차순으로 각각 정렬하여 두 값을 합산한 결과를 반환하시요
조건
- time의 값은 오전과 오후가 각각 “AM”, “PM” 으로 표시하며 12시간제로 “시:분:초” 의 형태를 가짐
- 시분초는 한자리 수라도 두자리로 표시
- N <= 200,000
예시
time | n | result |
---|---|---|
AM 12:01:00 | 1 | 00:01:01 |
PM 12:01:00 | 2 | 12:01:02 |
PM 09:01:40 | 50 | 21:02:10 |
AM 11:01:00 | 3700 | 00:02:40 |
코드
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class Solution {
//p = 시간 , n = 증가할 sec
public String solution(String time, int n) throws IllegalArgumentException {
String answer = null;
Matcher matcher = Pattern.compile("(\\w+) (\\d+):(\\d+):(\\d+)").matcher(time);
if(matcher.find()){
boolean isPm = matcher.group(1).toUpperCase().equals("PM");
int hour = Integer.parseInt(matcher.group(2));
int min = Integer.parseInt(matcher.group(3));
int sec = Integer.parseInt(matcher.group(4)) + n;
min += sec/60;
sec %= 60;
hour += min/60;
min %= 60;
if(isPm && hour!=12){
hour += 12;
if(hour > 24){
hour %= 24;
}
}
if(!isPm && hour==12){
hour -= 12;
}
answer = String.format("%02d:%02d:%02d",hour,min,sec);
return answer;
}
throw new IllegalArgumentException("time format is illegal");
}
}