
내가 생각했을때 문제에서 원하는부분
첫 번째 줄에는 현재 날짜가 주어진다.
두 번째 줄에는 임스가 받은 기프티콘의 개수 N(1 ≤ N ≤ 100)이 주어진다.
세 번째 줄부터 N개의 줄에 임스가 받은 기프티콘의 유효기간이 주어진다.
연도는 1800년부터 2023년까지만 주어진다.
임스가 현재 사용할 수 있는 기프티콘의 개수를 출력한다.
내가 이 문제를 보고 생각해본 부분
입력 준비 (BufferedReader):
BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); : 표준 입력(콘솔)으로부터 데이터를 효율적으로 읽어오기 위한 BufferedReader 객체를 생성한다.
현재 날짜 처리:
String currentDateStr = br.readLine(); : 입력의 첫 번째 줄에서 현재 날짜를 YYYY-MM-DD 형식의 문자열로 읽어온다.
int currentDate = Integer.parseInt(currentDateStr.replace("-", "")); : 날짜 문자열을 비교하기 쉬운 정수 형태로 변환한다.
예를 들어, "2022-12-12"는 "20221212"로 바뀌고, 이를 int 형으로 파싱하여 currentDate 변수에 저장한다.
이 방법은 날짜의 선후 관계를 숫자의 대소 관계로 직관적으로 비교할 수 있게 해준다.
기프티콘 개수 읽기:
int N = Integer.parseInt(br.readLine()); : 두 번째 줄에서 기프티콘의 총 개수 N을 정수로 읽어온다.
유효 기프티콘 카운트 초기화:
int usableGifticonsCount = 0; : 사용할 수 있는 기프티콘의 개수를 세기 위한 카운터 변수를 0으로 초기화한다.
기프티콘 유효기간 비교 및 카운트:
for(int i = 0; i < N; i++) { ... } : N번 반복하면서 각 기프티콘의 유효기간을 처리한다.
String expireDateStr = br.readLine(); : 각 반복마다 기프티콘의 유효기간을 문자열로 읽어온다.
int expireDate = Integer.parseInt(expireDateStr.replace("-", "")); : 현재 날짜와 동일하게, 유효기간 문자열(expireDateStr)에서 하이픈(-)을 제거하고 정수(expireDate)로 변환한다.
if(expireDate >= currentDate) { usableGifticonsCount++; } : 변환된 expireDate가 currentDate보다 크거나 같으면, 해당 기프티콘은 사용 가능하므로 usableGifticonsCount를 1 증가시킨다.
이 조건은 "현재 날짜 이후의 유효기간"이라는 문제의 조건을 정확히 만족한다.
결과 출력:
System.out.println(usableGifticonsCount); : 모든 기프티콘에 대한 처리가 끝난 후, 최종적으로 사용할 수 있는 기프티콘의 총 개수를 출력한다.
자원 해제:
br.close(); : BufferedReader 사용이 끝났으므로 스트림을 닫아 자원을 해제한다.
코드로 구현
package baekjoon.baekjoon_31;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
// 백준 28454번 문제
public class Main1228 {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
// 1. 현재 날짜를 YYYY-MM-DD 형식으로 읽고, 비교하기 쉽게 숫자 형태로 변환합니다.
// 예를 들어 "2022-12-12" -> 20221212
String currentDateStr = br.readLine();
int currentDate = Integer.parseInt(currentDateStr.replace("-", ""));
// 2. 기프티콘의 총 개수 N을 읽습니다.
int N = Integer.parseInt(br.readLine());
int usableGifticonsCount = 0; // 사용할 수 있는 기프티콘 개수를 저장할 변수
// 3. N개의 기프티콘 유효기간을 하나씩 읽어 처리합니다.
for (int i = 0; i < N; i++) {
String expireDateStr = br.readLine();
int expireDate = Integer.parseInt(expireDateStr.replace("-", ""));
// 4. 기프티콘의 유효기간이 현재 날짜와 같거나 현재 날짜보다 나중인 경우
// (즉, expireDate >= currentDate) 사용 가능하다고 판단하고 카운트를 증가시킵니다.
if (expireDate >= currentDate) {
usableGifticonsCount++;
}
}
// 5. 최종적으로 사용할 수 있는 기프티콘의 개수를 출력합니다.
System.out.println(usableGifticonsCount);
br.close();
}
}
코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.