백준 Gift Expire Date

KIMYEONGJUN·2025년 12월 5일
post-thumbnail

문제

내가 생각했을때 문제에서 원하는부분

첫 번째 줄에는 현재 날짜가 주어진다.
두 번째 줄에는 임스가 받은 기프티콘의 개수 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();
    }
}

마무리

코드와 설명이 부족할수 있습니다. 코드를 보시고 문제가 있거나 코드 개선이 필요한 부분이 있다면 댓글로 말해주시면 감사한 마음으로 참고해 코드를 수정 하겠습니다.

profile
Junior backend developer

0개의 댓글