문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
출력
첫째 줄에 상수의 대답을 출력한다.
코딩
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n1=sc.nextInt();
int n2=sc.nextInt();
sc.close();
n1=(n1/100)+(n1%10)*100+((n1/10)%10)*10;
n2=(n2/100)+(n2%10)*100+((n2/10)%10)*10;
if(n1>n2) {
System.out.println(n1);
}
else
System.out.println(n2);
}
}
방법1. Scanner + 연산
문제에서 두 수에 0이 포함되어 있지 않다는 조건을 보고 나누기를 이용했다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc= new Scanner(System.in);
int A = sc.nextInt();
int B = sc.nextInt();
sc.close();
A = Integer.parseInt(new StringBuilder().append(A).reverse().toString());
B = Integer.parseInt(new StringBuilder().append(B).reverse().toString());
System.out.print(A > B ? A : B);
}
}
방법2. Scanner + StringBuilder
StringBuilder는 append를 이용해서 문자열을 추가할 수 있다.
StringBuilder생성과 동시에 append 메서드로 값을 추가해준다. 저장된 값을 reverse로 문자열을 뒤집어주고, 이것을 반환하기 위해 toString을 이용한다. 이렇게 반환된 문자열을 숫자로 변환하기 위해 Integer.parseInt를 이용하였다.
앞서 if 문으로 큰 값을 꺼내온 문장을 삼항연산자로 표현했다.
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()," ");
int A = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
int B = Integer.parseInt(new StringBuilder(st.nextToken()).reverse().toString());
System.out.print(A > B ? A:B);
}
}
방법3. BufferedReader + StringTokenizer + StringBuilder
BufferedReader란 한줄 씩 입력 받기 위한 클래스로 Scanner 로 입력받는 것 보다 br으로 입력받는 것이 속도가 더 빠르다.
숫자 2개를 띄어쓰기를 사이에 두고 입력을 받는다. " " 띄어쓰기 공백으로 StringTokenizer 메서드를 통해서 분리하고 각각 StringBuilder으로 뒤집어 저장한다. 저장한 문자열은 다시 정수로 바꿔준다.
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);
}
}
방법4. System.in.read
자바의 기본 입출력 시스템을 이용한다. 자바에서 기본적으로 ASCII 코드 값이 입력되기 때문에 read 메서드는 입력한 값을 하나씩 읽어들여 ASCII 값으로 반환한다.
read메서드로 A를 입력하면 65가 반환된다. (입력 받은 문자를 그대로 표시하고 싶다면 자료형 char로 형변환을 해주면 된다.)
숫자 0은 48이 된다. 따라서 -48을 처리해주면 원래의 숫자를 반환할 수 있다.
한 자리씩 반환되기 때문에 순서대로 일의자리, 십의자리, 백의자리 순으로 누적해주면 된다.
'Algorithm > baekjoon' 카테고리의 다른 글
JAVA : 백준 1330번 두 수 비교하기 (0) | 2022.06.09 |
---|---|
JAVA : 백준 1000번 A+B, 1001번 A-B (0) | 2022.06.09 |
JAVA : 백준 1152번 단어의 개수 (Scanner, BufferedReader / Split, StringTokenizer) (0) | 2022.06.07 |
JAVA : 백준 1157번 단어 공부 (0) | 2022.06.07 |
JAVA : 백준 2439번 별찍기 - 2 (0) | 2022.06.06 |