[자바JAVA]백준 2908 상수 풀이(memory와 runtime비교)

문제

상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.

1
2
3
4
5
//입력
734 893

//출력
437




코드

  • memory 11488 runtime 76
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class Main {

public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] nums = br.readLine().split(" ");
String[] convertNum = new String[]{"", ""};

// 숫자 거꾸로 만들기
for(int i=0;i<2;i++){
char[] originNum = nums[i].toCharArray();
for(int j=2; j>=0; j--){
convertNum[i] += originNum[j];
}
}

// 최대값구하기 -> 4가지방식을 사용할 수 있다.
int max = Integer.parseInt(convertNum[0]);
if(max < Integer.parseInt(convertNum[1])){
max = Integer.parseInt(convertNum[1]);
}
System.out.println(max);
}
}




최대값 구하는 방법에 따른 성능 비교

최대값은 정말 다양한 방식으로 구할 수 있다.
메모리와 런타임에 얼마나 영향을 미치는 지 궁금하여 최대값부분만 4가지 방법으로 바꿔서 각각 성능을 비교해보았다.


### 코드1: 변수1개+if문사용
1
2
3
4
5
6
// 최대값구하기
int max = Integer.parseInt(convertNum[0]);
if(max < Integer.parseInt(convertNum[1])){
max = Integer.parseInt(convertNum[1]);
}
System.out.println(max);

### 코드2: 모두 변수로 처리
1
2
3
4
5
6
7
8
// 최대값구하기
int num1 = Integer.parseInt(convertNum[0]);
int num2 = Integer.parseInt(convertNum[1]);
if(num1 > num2){
System.out.println(num1);
}else{
System.out.println(num2);
}

### 코드3: 모두 변수 + 삼항연산자
1
2
3
4
// 최대값구하기
int num1 = Integer.parseInt(convertNum[0]);
int num2 = Integer.parseInt(convertNum[1]);
System.out.println(num1 > num2 ? num1 : num2);

### 코드4: 변수사용없이 Math.max()사용
1
2
// 최대값구하기
System.out.println(Math.max(Integer.parseInt(convertNum[0]), Integer.parseInt(convertNum[1])));
방법 memory runtime
변수1개+if문사용 11488 76
모두 변수로 처리 11448 76
모두 변수 + 삼항연산자 11540 76
변수사용없이 Math.max()사용 11468 80

나머지 방법들은 다 비슷비슷한데 삼항연산자는 메모리를 많이 사용한다는 것을 알 수 있었다. 앞으로 자재해야겠다.
한 번만 쓰는 변수는 만들지 않으려고 하는 편인데 변수 처리하니까 오히려 메모리가 조금 개선됨을 알 수 있다.




백준의 다른 문제 풀이가 보고싶다면?