jeongwon
[백준 JAVA] 2908번 - 상수 본문
문제:
2908번: 상수
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두
www.acmicpc.net
약식 순서도:
1) 문자열을 입력 받아 공백(" ") 구분자를 기준으로 나눠 String 배열에 저장한다. (BufferedReader, String.split(), String[])
2) 문자열을 숫자로 변환해 int 배열에 담고, 각 배열의 값을 역순으로 계산해 저장한다. (Integer.ParseInt(), int[], int tmp)
3) int 배열의 값을 비교한 후 큰 값을 변수에 담아 출력한다. (int result)
나의 답안 :
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str=br.readLine().split(" ");
int[] arr=new int[2];
for(int i=0; i<2; i++) {
arr[i]=Integer.parseInt(str[i]);
int tmp=(arr[i]%10)*100 + ((arr[i]/10)%10)*10 + arr[i]/100;
arr[i]=tmp;
}
int result;
if(arr[0]>arr[1]) result=arr[0];
else result = arr[1];
System.out.println(result);
br.close();
}
}

개선 답안 : (출처 및 도움받은 곳) https://st-lab.tistory.com/66
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main{
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] str=br.readLine().split(" ");
int a = Integer.parseInt(new StringBuilder(str[0]).reverse().toString());
int b = Integer.parseInt(new StringBuilder(str[1]).reverse().toString());
System.out.println(a>b ? a : b);
br.close();
}
}
BufferedReader 입력 방식과 split(), String 배열 등은 유지하되 StringBuilder, 삼항연산자를 이용해보았다. 시간과 메모리 상의 큰 차이는 없었지만, 코드가 무척 깔끔해졌다. (사라진 변수와 반복문, 배열을 생각하면 개인적으로 놀라운 변화다.)
주목할 점은 역시 StringBuilder의 reverse() 메소드. 만약 StringBuilder의 인자가 int라면 reverse() 메소드 전에 append(인자)를 추가해주면 된다.
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
int A = 0;
int B = 0;
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.println(A > B ? A : B);
}
}
필자는 꼼수라고 표현하셨지만 왠지 명쾌한 답안.. byte로 한 문자씩 읽어들이는 기본 입력을 이용해 연산(48은 0이다.)하는 방법.
'오늘의 문제' 카테고리의 다른 글
| [백준 JAVA] 2941번 - 크로아티아 알파벳 (0) | 2022.06.09 |
|---|---|
| [백준 JAVA] 5622번 - 다이얼 (0) | 2022.06.08 |
| [백준 JAVA] 1152번 - 단어의 개수 (0) | 2022.06.07 |
| [백준 JAVA] 1157번 - 단어 공부 (0) | 2022.06.07 |
| [백준 JAVA] 2675번 - 문자열 반복 (0) | 2022.06.04 |