본문 바로가기
백준알고리즘

백준알고리즘:p2908 상수

by socialcomputer 2021. 3. 8.

분류: 문자열

 

문제

 

코드

//백준알고리즘 제출시 클래스 이름은 Main으로 바꿔야 됨 
package character_string;

import java.util.Scanner;

public class p2908 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int x = sc.nextInt();
		int y = sc.nextInt();
		int A = reversing(x);
		int B = reversing(y);
		
		System.out.print(Math.max(A, B));
		
sc.close();
	}
	
	public static int reversing(int num) {
		int reversed_num = 0;
		int x = Integer.toString(num).length();
		for(int i=x-1; i>=0; i--) {
			int remain = num%10;
			reversed_num += remain*(Math.pow(10, i)); //~의 몇제곱 사용할 때는 Math.pow(밑, 지수)
			num = num/10;
		}
		return reversed_num;
	}

}

▶문제가 쉽다고 생각하고 금방 풀어야지 했는데 시간이 엄청 걸렸다...

계속 10으로 나눈 나머지 수에 10의 제곱을 곱했는데

400이 나와야 하는데 자꾸 36이 나왔다.. ^사용이 잘못된건지

그래서 Math.pow(밑, 지수) 를 사용했더니 답이 나왔다.

 

▶처음엔 숫자를 문자열로 받아 charAt으로 맨 뒤부터 다시 append하여 숫자를 거꾸로 만든 후, 숫자로 또 바꿔 비교하려고 했다. 근데 이런 저런 (char를 string으로 바꾸고 또 int로 바꾸고 뭐 이런 과정들) 것들이 복잡하고 어떤 건 안되고 그래서 포기하고 숫자 10나머지를 10^i한 걸 바로 더하기로 했다.

 

 

▶stringBuilder는 String이 아니다. 

Integer.parseInt()로 int로 바꾸려 했는데 String이 아니라고 빨간줄이 떴다.

 

package character_string;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class p2908_reverse {

	public static void main(String[] args) {
		try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in));){
			StringTokenizer st = new StringTokenizer(br.readLine(), " ");
			
			int x = Integer.parseInt(new StringBuilder().append(st.nextToken()).reverse().toString());
			int y = Integer.parseInt(new StringBuilder().append(st.nextToken()).reverse().toString());
			
			System.out.print(x>y? x:y);
			
		}catch(Exception e) {	e.printStackTrace();	}
		

	}

}

▶이것보다 더 간단한 방법은

위 코드처럼 .reverse()를 사용하는 것이다.

-토큰과 스트링빌더, reverse()이용

Integer.parseInt(new StringBuilder().append(st.nextToken()).reverse().toString());

토큰을 받아서 빌더에 넣고 역정렬한 후 문자열로 바꿨다.

 


채점결과

 

링크 www.acmicpc.net/problem/2908

 

2908번: 상수

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

www.acmicpc.net

 

댓글