상수 (2908) 풀이

2023. 6. 20. 12:08BaekJoon/문자열

문제내용

사용자에게 정수 두개를 입력받아 각 정수를 뒤집은 상태로 비교해 큰수를 출력하는 문제이다.


풀이

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

public class Main {
	public static void main(String[] args) {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		try {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String a = st.nextToken();
			String b = st.nextToken();
			char[] _a = a.toCharArray();
			char[] _b = b.toCharArray();
			a = "";
			b = "";
			for(int i = _a.length-1; i >= 0; i--){
				a += _a[i];
			}
			for(int i = _b.length-1; i >= 0; i--){
				b += _b[i];
			}
			int realA = Integer.parseInt(a);
			int realB = Integer.parseInt(b);
			
			int result = realA>realB ? realA : realB;
			
			bw.write(String.valueOf(result));
			bw.write("\n");
			bw.flush();
			bw.close();
		} catch (IOException e) {
			System.exit(0);
		}
	}
}

사용자에게 정수를 입력받기 위해 BufferedReader와 StringTokenizer를 사용해 a,b에 입력받았다.

입력받은 정수를 문자열로 받았으며 숫자를 뒤집기 위해 먼저 문자 자료형 배열로 담아줬다.(문자열에서 제공하는 toCharArray 메소드를 사용해)

각 for문으로 문자를 뒤집어 문자열 a,b에 다시 재할당했다.

뒤집은 문자열 a,b를 정수 자료형으로 형변환 시키기 위해 Integer.parseInt를 사용해 정수형으로 바꿨다.

삼항연산자를 이용해 realA가 크다면 realA를 realB가 크다면 realB를 반환해 result에 할당한다.(두 수가 같은 경우와 0인 경우는 포함하지 않는다고 문제에서 명시했으므로 처리하지 않았다.)

마지막으로 BufferedWriter를 사용해 출력했다.

혹시 모를 예외를 대비하기 위해 IOException 발생 시 JVM을 종료하는 System.exit(0)을 했따. 

0은 정상종료, 다른숫자는 비정상종료라고 하지만 일단 0으로 선언했다.


겪었던 문제

이 문제를 풀면서 성능을 고려했을 때 문제는 맞출 수 있지만 비효율적인 로직을 짜고있다는 생각이 들었다. 쉽게 말해 문자열로 입력받아 문자 배열로 바꾸고 다시 정수로 바꾸는 것보다 한번에 reverse메소드를 가지고 있는 것을 사용해 뒤집어서 바로 비교하는 것과 같은 방법이 훨씬 더 효율적일 것 같았다. 코딩을 하면 할수록 성능과 효율성을 따지게되는데 항상 벽에 부딪혀 원하는 답을 못구할 때가 있는 것 같다... 먼저 이 길을 걸었던 모든 선배님들이 존경스럽다..👍

'BaekJoon > 문자열' 카테고리의 다른 글

그대로 출력하기 (11718) 풀이  (0) 2023.06.22
다이얼 (5622) 풀이  (0) 2023.06.20
단어의 개수 (1152) 풀이  (0) 2023.06.20
문자열 반복 (2675) 풀이  (0) 2023.06.16
알파벳 찾기 (10809) 풀이  (0) 2023.06.16