Algorithm/Baekjoon

[Baekjoon] 백준 2908 상수 - java

담크 2021. 7. 23. 23:59

오늘은 저번과 마찬가지로 문자열 문제인 상수를 풀어보려 합니다.

브론즈 2문제지만 설명을 보고 생각나는 게 로직이 있었는데 좀 더 쉽게 풀 수 있을 거 같아서요 ㅎㅎ

저번에서 설명했듯 이번부터는 최대한 Scanner를 사용하지 않고 풀어보려고 합니다.

그럼 문제풀러 가볼까요?

문제는

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

 

2908번: 상수

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

www.acmicpc.net

 

여기서 확인하시면 됩니다.


문제풀이

package Baek;

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

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());
		
		int a = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
		int b = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
		
		if (a > b) {
			System.out.println(a);
		} else {
			System.out.println(b);
		}
	}
}

 

이번부터는 Scanner처럼 쓸 수 있는 BufferedReader를 사용해서 문제를 풀었습니다.

StringTokenizer를 사용해서 입력된 내용 중 공백 문자를 기준으로 문자열을 나눠주는 역할을 합니다. split( )과 비슷한 역할이라고 생각하시면 됩니다.

StringBuilder의 경우 reverse라는 상황에 딱 맞는 메소드를 가지고 있기 때문에 StringBuilder를 사용하고 이를 맞춰주기 위해 toString()을 사용해 String 타입으로 맞춰줬습니다.

이렇게 a, b의 입력값이 앞뒤로 바뀌고 이제 나머지는 이를 비교해서 출력만 하면 됩니다.

 

이번 문제의 경우 사실 맨 처음 생각했던건 더하기 사이클 문제에서 풀었던 것처럼 a 입력값을 쪼개서 100의 자리는 그냥 더하고 10의 자리는 10을 곱해서 1의 자리는 100을 곱해서 바꿔주는 방식을 생각했는데 찾아보니까 Stringbuilder에 좋은 메소드가 있어서 가지고 와 봤습니다. 전에도 말했듯이 문제는 푸는 방법은 무궁무진하므로 이 방법이 아니더라도 본인이 쉽게 풀 수 있는 방법을 사용하는 게 가장 베스트이지 않나 생각합니다 ㅎㅎ