개발 일상(Dev)

[JAVA] if/else 문과 switch/case 문의 속도 비교 (feat.백준 9498번)

Roovelo 2024. 11. 21. 21:45

시험 성적 _ 백준 9498번

백준에 다음과 같은 문제가 있습니다.

백준 9498번 문제
점수를 입력 받아 그 값이 해당하는 범위의 값을 찾아서 출력하는 프로그램 만들기

문제 자체는 어렵지 않습니다.
그런데 문제를 풀려고 해 보니까 2가지 방법이 우선 떠오르더라고요.

if / else 구문을 이용한 방법과
switch / case 구문의 2가지 방법이었습니다.

우선 최근에 다시 처음부터 차근차근 풀어보기를 시작하면서 입력은 BufferedReader를 이용해서 입력받는 것을 연습하고 있고요.(덕분에 속도가 많이 빨라지긴 했습니다.)

저 2개 방법의 속도 차이가 궁금해서 우선 검색을 해봤는데 그 값을 비교해야 되는 경우가 많으면 많아질수록 switch / case 문이 유리하다고는 나오더라고요.
근데 저렇게 짧은 코드에서도 유의미한 차이가 날까 싶어서 직접 돌려봤습니다.

[JAVA] if / else 문과 switch / case 문 비교

if/else 문으로 만든 코드는 다음과 같고요.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        int score = Integer.parseInt(str);
        if(score >= 90){
            System.out.println("A");
        }else if(score >= 80){
            System.out.println("B");
        }else if(score >= 70){
            System.out.println("C");
        }else if(score >= 60){
            System.out.println("D");
        }else {
            System.out.println("F");
        }
    }
}


switch/case 문으로 만든 코드는 아래와 같이 만들었습니다.

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;

public class Main{
    public static void main(String[] args) throws IOException{
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String str = br.readLine();
        int score = Integer.parseInt(str);
        switch(score/10){
            case 10 :
            case 9 : System.out.println("A");
                break;
            case 8 : System.out.println("B");
                break;
            case 7 : System.out.println("C");
                break;
            case 6 : System.out.println("D");
                break;
            default : System.out.println("F");
                break
                
        }
    }
}

case 문 같은 경우에는 범위 값으로 정할 수 없기 때문에 /10을 해서 그 몫을 이용하는 방법을 사용했습니다.


백준에서 동작하는 메모리, 속도 비교

대단한 비교를 할 건 아니고 백준의 실행 속도만 비교해 봤습니다.
코드 자체가 워낙 짧고 얼마 안 되는 양이다 보니까 실제 성능 비교에는 큰 의미는 없을 거라고 생각했지만 혹시나 Scanner와 BufferedReader처럼 뭔가 유의미한 차이가 나지 않을까 기대해 봤는데요.

switch/case 문과 if/else 문의 속도 차이 비교
메모리와 시간이 거의 유사한 2개 구문

가운데는 오타가 나서 컴파일 에러가 나버린 거라서 무시해 주시고요. ㅎㅎ
보시면 알겠지만 메모리와 시간이 거의 차이가 없더라고요.

코드 자체가 워낙 짧다 보니까 성능의 차이가 날 여지가 없는 것 같습니다.

결론적으로 코드가 아주 길어지거나 반복문이 매우 많이 돌아간다면 또 어떻게 될지 모르겠지만 그냥 간단한 문제 풀이나, 짧은 문제 풀이들에서는 편한 구문을 사용하면 될 것 같습니다.

나중에 제 수준이 많이 올라서 속도에 아주 민감한 문제 풀이 수준까지 가면 그때 다시 한번 탐구해 봐야겠습니다.

이렇게 짧은 코드에서는 유의미한 속도 차이를 확인할 수 없었다.
728x90