백준 나이 계산하기

KIMYEONGJUN·2025년 5월 10일
0
post-thumbnail

문제

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

첫째 줄에 어떤 사람이 태어난 연도, 월, 일이 주어진다.
생년월일은 공백으로 구분되어져 있고, 항상 올바른 날짜만 주어진다.
둘째 줄에 기준 날짜가 주어진다.
기준 날짜도 공백으로 구분되어져 있으며, 올바른 날짜만 주어진다.
입력으로 주어지는 생년월일은 기준 날짜와 같거나 그 이전이다.
입력으로 주어지는 연도는 1900년보다 크거나 같고, 2100년보다 작거나 같다.

첫째 줄에 만 나이, 둘째 줄에 세는 나이, 셋째 줄에 연 나이를 출력한다.

내가 이 문제를 보고 생각해본 부분

java.util.StringTokenizer를 사용하여 공백으로 구분된 연도, 월, 일 값을 분리한다.
입력받은 문자열 값을 Integer.parseInt()를 사용하여 정수로 변환한다.
만 나이는 기준 연도 - 생년으로 기본값을 계산한 후, 기준 날짜가 생일이 지나지 않았으면 1을 먭니다. 
생일이 지나지 않았는지 판단하는 조건은 (기준 월 < 생일 월) 또는 (기준 월 == 생일 월 그리고 기준 일 < 생일 일)이다.
세는 나이는 기준 연도 - 생년 + 1로 계산한다. 
한국 나이는 태어나자마자 1세이고, 매년 1월 1일에 한 살씩 더 먹기 때문이다.
연 나이는 기준 연도 - 생년으로 계산한다.
법률에서 특정 기준(예: 병역법, 청소년 보호법)을 적용할 때 사용하는 나이이다.
계산된 세 가지 나이를 순서대로 한 줄씩 출력한다.
BufferedReader를 닫아 자원을 해제한다.

코드로 구현

package baekjoon.baekjoon_28;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.util.StringTokenizer;

// 백준 16199번 문제
public class Main1018 {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

        // 생년월일 입력 받기
        StringTokenizer st = new StringTokenizer(br.readLine());
        int birthYear = Integer.parseInt(st.nextToken());
        int birthMonth = Integer.parseInt(st.nextToken());
        int birthDay = Integer.parseInt(st.nextToken());

        // 기준 날짜 입력 받기
        st = new StringTokenizer(br.readLine());
        int refYear = Integer.parseInt(st.nextToken());
        int refMonth = Integer.parseInt(st.nextToken());
        int refDay = Integer.parseInt(st.nextToken());

        // 1. 만 나이 계산
        int manNai = refYear - birthYear;
        // 기준 날짜의 월이 생일 월보다 이전이거나,
        // 기준 날짜의 월이 생일 월과 같지만 기준 날짜의 일이 생일 일보다 이전이면
        // 생일이 지나지 않은 것이므로 만 나이에서 1을 뺌
        if(refMonth < birthMonth || (refMonth == birthMonth && refDay < birthDay)) {
            manNai--;
        }

        // 2. 세는 나이 계산
        // 태어났을 때 1세, 연도가 바뀔 때마다 1세 증가
        int seneunNai = refYear - birthYear + 1;

        // 3. 연 나이 계산
        // 현재 연도에서 생년월일의 연도를 뺀 값
        int yeonNai = refYear - birthYear;

        // 결과 출력
        System.out.println(manNai);
        System.out.println(seneunNai);
        System.out.println(yeonNai);
        br.close();
    }
}

마무리

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

profile
Junior backend developer

0개의 댓글

Powered by GraphCDN, the GraphQL CDN