코딩테스트 String형식의 날짜 다루기

오진석·2023년 7월 17일

코딩테스트

목록 보기
2/3

코딩테스트에서 문자열 형식의 날짜를 주고 몇일 후의 날짜를 구하시오 특정일이 지났는지 비교하시오 등의 문제를 풀 때 사용하는 방법
날짜 감, 가산 하는법

SimpleDateTime과 Calander 객체를 활용한 코드

import java.text.ParseException;
//.parse를 사용할 때 throw처리해줘야하는 익셉션
import java.text.SimpleDateFormat;

String dateString = new String("문제에서 제공하는 날짜형식의 문자열");

int[] setDate = new int[]{}

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

Calander cal = Calander.getInstance();

Date date = sdf.parse(dateString);

cal.setTime(date);

cal.add(Calander.YEAR, setDate[0]);
cal.add(Calander.MONTH, setDate[1]);
cal.add(Calander.DAY, setDate[2]);

String answer = sdf.format(cal.getTime())

해설
문자열 데이터를 형식에 맞게 Date객체로 변환하고 그걸 Calander객체에 넣어서 감,가산하고 다시 문자열로 리턴하는 방식

날짜의 비교는 Date클래스의 CompareTo를 활용할 수 있다.

dateA.compareTo(dateB);

dateA가 더 빠른 날짜면 (날짜의 절대값이 낮으면) -1리턴
dateA와 dateB가 같은 날짜면 (날짜의 절대값이 낮으면) 0리턴
dateB가 더 빠른 날짜면 (날짜의 절대값이 낮으면) 1리턴

DateTimeFormatter과 LocalDate 객체를 활용한 코드

import java.time.format.DateTimeFormatter;
import java.time.LocalDate;

String today = "2020.01.01" // 문제에서 제공해주는 오늘 날짜
DateTimeFormatter formatter =  DateTimeFormatter.ofPattern("yyyy.MM.dd");
LocalDate date = LocalDate.parse(today, formatter);
LocalDate compareDate LocalDate.parse(privacy[0], formatter)
																.plusMonths(termsMap.get(privacy[1]))
																.minusDays(1);

privacyRegisterYmdt.isBefore(date);

매달 말일이 x일로 지정된 문제에서의 테크닉

매달의 말일을 지정해주는 문제의 경우 Date객체를 사용하지말고 날짜 체계를 새로 정의해서 풀어나가는게 훨씬 효율적이다.

아래 코드는 말일을 28일로 고정했을때의 방식이다.

int daysA = dateA.year * 12 * 28 + dateA.month * 28 + dateA.day
int daysB = dateB.year * 12 * 28 + dateB.month * 28 + dateB.day

daysA < daysB ? -1 : (daysA == daysB ? 0 : 1)

문제에서 주어지는 날짜들도 전부 28일로 통일 시켜버리면서 전부 int형 일 수로 만들어서 사용하기 때문에 이후의 비교 및 계산에서도 훨씬 수월해진다.

p.s.프로그래머스 2023 카카오 블라인드 코딩테스트 level1문제 리뷰

0개의 댓글