[BaekJoon] 18108번 - 1998년생인 내가 태국에서는 2541년생?! (java)

1. 문제

👉 문제 바로가기

- 조건

시간 제한 메모리 제한
1초 1024MB


- 문제

ICPC Bangkok Regional에 참가하기 위해 수완나품 국제공항에 막 도착한 팀 레드시프트 일행은 눈을 믿을 수 없었다. 공항의 대형 스크린에 올해가 2562년이라고 적혀 있던 것이었다.
불교 국가인 태국은 불멸기원(佛滅紀元), 즉 석가모니가 열반한 해를 기준으로 연도를 세는 불기를 사용한다. 반면, 우리나라는 서기 연도를 사용하고 있다. 불기 연도가 주어질 때 이를 서기 연도로 바꿔 주는 프로그램을 작성하시오.

- 입력

서기 연도를 알아보고 싶은 불기 연도 y가 주어진다. (1000 ≤ y ≤ 3000)

- 출력

불기 연도를 서기 연도로 변환한 결과를 출력한다.

- 예제

  입력      출력  
2541 1998





2. 풀이

문제 자체는 어렵지 않지만 불기를 어떻게 서기로 바꿀까?

문제 속에 답이 있다!
예제를 보면 불기 연도가 2541인 경우, 서기 연도가 1998년이다.
즉, 불기와 서기는 543년 차이가 있음을 알 수 있다.

불기를 입력했을 때, 그 입력값에서 543을 뺀 값이 서기가 된다.


2가지 입력 방식으로 결과를 출력하고자 한다.

  1. Scanner 클래스 사용
  2. BufferedReader 클래스 사용


- 1. Scanner 클래스 사용

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        //Scanner 객체 생성
        Scanner sc = new Scanner(System.in);
        
        int dif = 2541-1998;
        
        int A = sc.nextInt();
        
        System.out.println(A - dif);
    }
}

위와같이 객체를 생성할 때, Scanner(System.in) 에서 System.in 은 입력한 값을 Byte 단위로 읽는 것을 뜻한다.

Scanner에 대해 더 자세히 알고싶다면 여기를 눌러보자





- 2. BufferedReader 클래스 사용

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

public class Main{
    public static void main(String[] args)throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        
        int dif = 2541-1998;
        
        int A = Integer.parseInt(br.readLine());
        
        System.out.println(A - dif);
    }
}

BufferedReader는 입력값을 한 줄로 읽은 후 문자열로 반환한다.
그래서 int형 변수에 값을 저장하려면 int형으로 형 변환을 해줘야한다.
Integer 클래스의 parseInt()라는 메소드를 사용하면 되는데, 숫자형식의 문자열을 정수형으로 반환해주는 역할을 한다.

BufferedReader 클래스에 대해 더 알아보고 싶으면 여기를 클릭하면 된다.




3. Scanner VS BufferedReader 성능 비교

img

입력의 경우 확실히 Scanner 보다는 BufferedReader 가 빠른 것을 볼 수 있다.





관련 페이지




Categories:

Updated:

Leave a comment