728x90

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

 

2908번: 상수

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

www.acmicpc.net

문제

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.

상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.

두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

 

풀이

문자열 단계의 문제이지만, 문자열을 사용하지 않고도 해결할 수 있다.

문자열을 사용한 방법과 사용하지 않은 방법 두 가지로 풀어보았다.


🔔 자세한 코드 설명은 더보기 란에 작성하였습니다.

더보기

1. 아래 코드는 문자열을 사용하지 않은 코드에서 num1과 num2를 각각 뒤집는 계산식이다.

ex) 원래 num1이 437이었을 경우, 우변의 계산은 7 * 100 + 3 * 10 + 4가 돼서 734로 변환된다.

num1 = num1 % 10 * 100 + num1 / 10 % 10 * 10 + num1 / 100 % 10;
num2 = num2 % 10 * 100 + num2 / 10 % 10 * 10 + num2 / 100 % 10;

 

2. 아래 코드는 문자열을 사용한 코드에서 num1과 num2를 각각 뒤집는 계산식이다.

 

sb : StringBuilder 클래스 객체

st : StringTokenizer 클래스 객체

reverse() : StringBuilder 클래스의 문자열을 뒤집는 메서드

toString() : StringBuilder 클래스 객체의 내용을 String으로 변환해주는 메서드

int num1 = Integer.parseInt(sb.append(st.nextToken()).reverse().toString());
int num2 = Integer.parseInt(sb.append(st.nextToken()).reverse().toString());

 

 


코드

문자열을 사용하지 않은 코드

import java.io.*;
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;

        st = new StringTokenizer(br.readLine());

        int num1 = Integer.parseInt(st.nextToken());
        int num2 = Integer.parseInt(st.nextToken());

        num1 = num1 % 10 * 100 + num1 / 10 % 10 * 10 + num1 / 100 % 10;
        num2 = num2 % 10 * 100 + num2 / 10 % 10 * 10 + num2 / 100 % 10;

        System.out.println(Math.max(num1, num2));
    }
}

 

문자열을 사용한 코드

import java.io.*;
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;
        StringBuilder sb = new StringBuilder();

        st = new StringTokenizer(br.readLine());

        int num1 = Integer.parseInt(sb.append(st.nextToken()).reverse().toString());

        sb = new StringBuilder();
        int num2 = Integer.parseInt(sb.append(st.nextToken()).reverse().toString());

        System.out.println(Math.max(num1, num2));
    }
}

 

 

틀린 부분이 있다면 정정해 주시면 감사하겠습니다.
궁금한 부분이 있거나, 다른 아이디어가 있으시면 자유롭게 댓글 남겨주세요!

728x90

+ Recent posts