Algorithm/Baekjoon

[백준] 2908번 : 상수 - Java

unknownomad 2022. 3. 21. 21:48

https://www.acmicpc.net/problem/2908

 

2908번: 상수

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두

www.acmicpc.net



주의점

  • 입력 받는 두 수 : 세 자릿수 고정 + 공백 기준으로 구분됨
  • 입력 받은 두 수를 뒤집은 값 중 더 큰 값 출력

구현 방법

  • Scanner + StringBuilder.reverse()
  • BufferedReader + StringTokenizer  + StringBuilder.reverse()
  • System.in.read() + 연산

풀이

1. Scanner + StringBuilder.reverse()

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {

        Scanner in = new Scanner(System.in);
        int A = in.nextInt(); //int로 받음
        int B = in.nextInt();
        in.close();
        
        /*
        append() 로 넣어진 값
        ➡ StringBuilder 타입으로 변환
        ➡ reverse() 통해 뒤집기
        ➡ StringBuilder 타입을 toString() 통해 String 타입으로 변환
        ➡ Integer.parseInt() 로 String 타입을 int 타입으로 변환
        */
        A = Integer.parseInt(new StringBuilder().append(A).reverse().toString());
        B = Integer.parseInt(new StringBuilder().append(B).reverse().toString());
        //Scanner 에서 int 타입으로 값 받아왔기에 객체 생성 시 append() 써야 함
        //값이 String 타입이면 append() 쓸 필요 없음
		
        System.out.print(A > B ? A : B);
    }
}

 

2. BufferedReader + StringTokenizer + StringBuilder.reverse()

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
 
public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
        
        //append() 쓰지 않고 객체 생성 시 바로 문자열 넣을 수 있음
        int A = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
        int B = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
        /*
        다른 방법
        StringTokenizer 대신 String 배열 선언 후 split() 으로 분리
        */
		
        System.out.print(A > B ? A : B);
    }
}

 

3. System.in.read() + 연산

import java.io.IOException;
 
public class Main {
    public static void main(String[] args) throws IOException {
    
        int A = 0;
        int B = 0;
		
        //read(): 한 자리씩 반환
        A += System.in.read() - 48;
        A += (System.in.read() - 48) * 10;
        A += (System.in.read() - 48) * 100;
		
        System.in.read(); //공백
		
        B += System.in.read() - 48;
        B += (System.in.read() - 48) * 10;
        B += (System.in.read() - 48) * 100;
		
        System.out.print(A > B ? A : B);
    }
}

성능

  1. System.in.read()
  2. BufferedReader + StringBuilder.reverse()
  3. Scanner + StringBuilder.reverse()

 


출처 : https://st-lab.tistory.com/66