본문 바로가기

문제풀기/백준 문제풀이

[백준 문제 2908번] 상수 문제

728x90
반응형

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

 

2908번: 상수

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

www.acmicpc.net

 

 

문제 2908) 상수 문제

 

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

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

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

입력)
첫째 줄에 상근이가 칠판에 적은 두 수 A와 B가 주어진다. 두 수는 같지 않은 세 자리 수이며, 0이 포함되어 있지 않다.

출력)
첫째 줄에 상수의 대답을 출력한다.

 

NO 예제 입력 예제 출력
1 734 893 437
2 221 231 132
3 839 237 938

 

정답 코드)

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();
		int a1 = 0;
		int b1 = 0;
		
		for(int i=0; i < 3; i++) {
			a1 += a % 10 * (int)Math.pow(10, 2-i);
			b1 += b % 10 * (int)Math.pow(10, 2-i);
			a /= 10;
			b /= 10;
		}
		
		if(a1 > b1) {
			System.out.println(a1);
		} else {
			System.out.println(b1);			
		}
	}
}
변수 2개를 먼저 입력 받고 그 변수들이 거꾸로 값이 저장될 수 있도록 변수를 2개 더 지정합니다.
for문을 이용해서 해당 길이만큼 반복해서 변수들이 거꾸로 출력되도록 만듭니다.

결국 둘 중 더 큰 값이 출력되도록 합니다.

 

 

다른 코드 풀이 예시)

		int num[] = new int[2];
		
		for(int i=0; i<num.length; i++) {
			String str = sc.next();
			num[i] = (str.charAt(2) - '0') * 100 + (str.charAt(1) - '0') * 10
					+ (str.charAt(0) - '0');
		}
		
		if(num[0] > num[1]) {
			System.out.println(num[0]);
		} else {
			System.out.println(num[1]);			
		}
배열로 숫자 2개를 입력 받는 방을 만든 후 문자열을 입력받아 charAt이라는 함수로 각각의 자릿수를 받아와 출력하는 코드를 한 줄에 만들고 num 값에 숫자가 저장되도록 만듭니다.

여기서 '0'의 값을 빼준 이유는 charAt은 아스키 코드로 출력되기 때문에 0(48)을 빼 원하는 숫자의 값이 출력되도록 합니다.

최종적으로는 더 큰 수가 출력되도록 만듭니다.

이때 if문 대신 Math.max 값을 사용하면 둘 중 더 큰 수를 출력할 수도 있습니다.

 

이렇게 또 한 문제를 풀어보았습니다! 이번 건 좀 난이도가 낮았던 것 같네요!!

 

다른 문제도 풀어볼게요~!!

 

많은 분들의 피드백은 언제나 환영합니다! 많은 댓글 부탁드려요~~

 

 

728x90
반응형