백준 [JAVA] :: 2908번 상수

s_omi·2023년 1월 6일
0

BAEKJOON (백준)

목록 보기
7/55

📚 문제 정의

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

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

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

📝 입력

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

  • 예제 입력 1
734 893
  • 예제 입력 2
221 231
  • 예제 입력 3
839 237

📝 출력

첫째 줄에 단어의 개수를 출력한다.

  • 예제 출력 1
437
  • 예제 출력 2
132
  • 예제 출력 3
938

💡 코드

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 = new StringTokenizer(br.readLine(), " ");
        String A = st.nextToken(); String B = st.nextToken();

        char aChar0 = A.charAt(0); char aChar1 = A.charAt(1); char aChar2 = A.charAt(2);
        char bChar0 = B.charAt(0); char bChar1 = B.charAt(1); char bChar2 = B.charAt(2);

        StringBuffer sb = new StringBuffer();
        if(aChar2 > bChar2 || (aChar2 == bChar2 && aChar1 > bChar1) || (aChar2 == bChar2 && aChar1 == bChar1 && aChar0 > bChar0)) {
            sb.append(A);
            System.out.println(sb.reverse());
        } else {
            sb.append(B);
            System.out.println(sb.reverse());
        }

        br.close();
    }
}

내 코드이긴 한데 너무 조잡함..

memo.

❗charAt 은 String 타입에만 가능
❗.reverse() 사용하려면 StringBuffer를 가져와 StringBuffer에 뒤집고 싶은 문자열을 append() 한 후 reverse() 실행


코드 축약

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 = new StringTokenizer(br.readLine(), " ");
        StringBuffer sbA = new StringBuffer(); 
        StringBuffer sbB = new StringBuffer();

        sbA.append(st.nextToken()).reverse(); 
        sbB.append(st.nextToken()).reverse();

        if(Integer.parseInt(String.valueOf(sbA)) > Integer.parseInt(String.valueOf(sbB)))
            System.out.println(sbA);
        else
            System.out.println(sbB);

        br.close();
    }
}

memo.

❗StringBuffer 타입에서 int 타입으로 바꾸려면 String.valueOf() → Integer.parseInt() 사용
❗String.valueOf(): 모든 타입을 String 타입으로 변경


베스트 코드

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

memo.

❗StringBulider : 문자열을 다루는 클래스로 많이 사용
❗toString() : StringBuilder 타입을 String 타입으로 변경하기 위해 사용
❗삼항연산자를 사용하자

profile
공부한 거 올려요 :)

0개의 댓글