본문 바로가기
Baekjoon 자바 코드/문자열

[백준] 2908번 상수 풀이 코드 (Java 자바)

by 망댕이 2024. 4. 16.
반응형

반응형

 

2908번 상수문제는 정말 쉽게 풀 수 있는 문제였다. 하지만 문자열 단계의 문제인 만큼 문자열을 이용해서도 한 번 풀어보았다.

 

정답 코드 1)

import java.util.*;

class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int a = sc.nextInt();
        int b = sc.nextInt();
        
        int rev_a = (a%10)*100+((a/10)%10)*10+(a/100);
        int rev_b = (b%10)*100+((b/10)%10)*10+(b/100);
        
        System.out.print(rev_a > rev_b ? rev_a : rev_b);
    }
}

 

입력값이 3자리로 정해져있기 때문에 2개의 a와 b값을 입력받아 수작업으로 뒤집어 준 다음 rev_a와 rev_b의 크기 비교를 통해 출력을 하였다.

정말 간단하게 풀 수 있는 문제였다.

 

정답 코드 2)

import java.util.*;

class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        
        int a = sc.nextInt();
        int b = sc.nextInt();
        String as = Integer.toString(a);
        String bs = Integer.toString(b);
        
        char[] arra = as.toCharArray();
        char[] arra2 = as.toCharArray();
        char[] arrb = bs.toCharArray();
        char[] arrb2 = bs.toCharArray();

        for(int i = 0; i < as.length(); i++){
            arra2[i] = arra[as.length()-i-1];
            
        }
        int aa = (arra2[2]-'0')+((arra2[1]-'0')*10)+((arra2[0]-'0')*100);
        
        for(int i = 0; i < bs.length(); i++){
            arrb2[i] = arrb[bs.length()-i-1];
        }
        int bb = (arrb2[2]-'0')+((arrb2[1]-'0')*10)+((arrb2[0]-'0')*100);

        System.out.print(aa > bb ? aa : bb);
    }
}

 

2번째로는 문자열 문제여서 입력 받은 int 값을 배열에 집어넣은 다음 for문을 이용하여 배열 순서를 뒤집어준다.

그리고 배열을 다시 int 값으로 바꾸고 크기 비교를 하는 방법이였다.

그냥 문자열 파트이기 때문에 문자열을 이용하여 길게 작성해보았다.

 

정답 코드 3)

import java.util.*;
import java.io.*;

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);
    }
}

 

마지막으로 StringBuilder클래스를 이용하는 방법이 있다.

내가 생각한 코드말고 더 좋은 방법을 써치하던 중 StringBuilder를 이용하여 String을 변경 가능한 문자열로 만들어 결과 값을 출력할 수 있음을 알아냈다.

 

그래서 StringBuilder의 메소드중 하나인 .reverse()를 이용하여 입력받은 문자를 전체를 뒤집을 수 있었다.

뒤집은 문자를 a와 b에 각각 할당한 다음 비교하여 큰 값을 출력하면 된다.

 

아래는 StringBuilder의 메소드 .reverse()를 이용한 숫자 뒤집기 예제이다.

public static void main(String[] args) {
    int a = 591;
    String aa = Integer.toString(a); // int형을 String형으로 변환
    StringBuilder sb = new StringBuilder(aa);
    System.out.print(Integer.parseInt(sb.reverse().toString())); // 다시 String형을 int형으로 변환 후 출력
    //System.out.print(sb.reverse());  String형의 문자가 출력 (출력 값은 195로 같음)
}

// 출력값 : 195

 

반응형