BOJ 2908
위 문제는 백준 사이트의 알고리즘 2908 문제에 관한 설명입니다.
문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734과 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String S1 = sc.next();
String S2 = sc.next();
S1 = reverse(S1);
S2 = reverse(S2);
int i1, i2 = 0;
i1 = Integer.parseInt(S1);
i2 = Integer.parseInt(S2);
if (i1 < i2)
System.out.println(S2);
else
System.out.println(S1);
sc.close();
}
public static String reverse(String re) {
String S = "";
for (int i = re.length() - 1; i >= 0; i--) {
S += re.charAt(i);
}
return S;
}
}
제가 푼 소스코드입니다.
String을 통해서 숫자를 받은 후 reverse 함수로 보냅니다.
reverse 함수에서는 S를 활용해서 re.charAt()을 활용해 뒤에서부터 앞으로 하나씩 붙여나갑니다.
그리고 Integer.parseInt를 이용해 넘겨받은 S1과 S2를 정수형으로 바꿔서 비교 후 출력하는 방식을 선택했습니다.
import java.util.Scanner;
public class OneHour {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// String input = sc.nextLine();
int first = sc.nextInt();
int second = sc.nextInt();
first = reverse(first);
second = reverse(second);
System.out.println(first>second?first:second);
}
public static int reverse(int input)
{
String out = "";
while(input != 0)
{
out += (input%10);
input = input/10;
}
return Integer.parseInt(out);
}
}
다른분이 푸신 코드입니다.
int형을 통해서 받으셨습니다.
알고리즘적인 과정은 상당히 유사합니다.
제가 문자열을 이용해서 풀어낸 이유는 “단계별로 풀어보기” 에서 문자열에 포함되어있는 문제였기 때문입니다.
문제를 여러가지 방식으로 풀어낼 수 있다는 것을 보여주는 예시라고 생각 되었습니다.