[자바JAVA]백준 2908 상수 풀이(memory와 runtime비교)
💡 핵심 요약 (TL;DR)
'백준 2908 상수 풀이(memory와 runtime비교)' 알고리즘 문제의 요구사항을 분석하고 최적의 자료구조와 연산 방식을 적용해 구현한 풀이다. 메모리와 런타임에 얼마나 영향을 미치는 지 궁금하여 최대값부분만 4가지 방법으로 바꿔서 각각 성능을 비교해보았다.
문제
상근이의 동생 상수는 수학을 정말 못한다. 상수는 숫자를 읽는데 문제가 있다. 이렇게 수학을 못하는 상수를 위해서 상근이는 수의 크기를 비교하는 문제를 내주었다. 상근이는 세 자리 수 두 개를 칠판에 써주었다. 그 다음에 크기가 큰 수를 말해보라고 했다.
상수는 수를 다른 사람과 다르게 거꾸로 읽는다. 예를 들어, 734와 893을 칠판에 적었다면, 상수는 이 수를 437과 398로 읽는다. 따라서, 상수는 두 수중 큰 수인 437을 큰 수라고 말할 것이다.
두 수가 주어졌을 때, 상수의 대답을 출력하는 프로그램을 작성하시오.
1 | //입력 |
코드
- memory 11488 runtime 76
1 | public class Main { |
최대값 구하는 방법에 따른 성능 비교
최대값은 정말 다양한 방식으로 구할 수 있다.
메모리와 런타임에 얼마나 영향을 미치는 지 궁금하여 최대값부분만 4가지 방법으로 바꿔서 각각 성능을 비교해보았다.
코드1: 변수1개+if문사용
1 | // 최대값구하기 |
코드2: 모두 변수로 처리
1 | // 최대값구하기 |
코드3: 모두 변수 + 삼항연산자
1 | // 최대값구하기 |
코드4: 변수사용없이 Math.max()사용
1 | // 최대값구하기 |
| 방법 | memory | runtime |
|---|---|---|
| 변수1개+if문사용 | 11488 | 76 |
| 모두 변수로 처리 | 11448 | 76 |
| 모두 변수 + 삼항연산자 | 11540 | 76 |
| 변수사용없이 Math.max()사용 | 11468 | 80 |
나머지 방법들은 다 비슷비슷한데 삼항연산자는 메모리를 많이 사용한다는 것을 알 수 있었다. 앞으로 자재해야겠다.
한 번만 쓰는 변수는 만들지 않으려고 하는 편인데 변수 처리하니까 오히려 메모리가 조금 개선됨을 알 수 있다.
백준의 다른 문제 풀이가 보고싶다면?
[자바JAVA]백준 2908 상수 풀이(memory와 runtime비교)
https://sowon-dev.github.io/2021/04/28/210429al-backjoon-2908/