코딩 테스트

[코딩테스트] 백준 9498번: 시험 성적

dev.jelee 2025. 5. 8. 16:08

# 문제

 

# 코드

  • if문과 if문 + while문 사용.

▼ if문만 사용한 코드

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

public class Main {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int score = Integer.parseInt(br.readLine());

    if (90 <= score && score <= 100) {
      System.out.println("A");
    } else if (80 <= score && score < 90) {
      System.out.println("B");
    } else if (70 <= score && score < 80) {
      System.out.println("C");
    } else if (60 <= score && score < 70) {
      System.out.println("D");
    } else if (0 <= score && score < 60) {
      System.out.println("F");
    } else {
      System.out.println("0~100 사이의 점수를 입력해주세요.");
    }
  }
}

 

▼ if문 + while문 사용한 코드

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

public class BOJ9498_v2 {
  public static void main(String[] args) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    int score = Integer.parseInt(br.readLine());

    if (0 > score || score > 100) {
      System.out.println("0~100 사이의 점수를 입력해주세요.");
    } else {
      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;
      }
    }
  }
}

 

# 입/출력 결과

 if문만 사용한 코드 실행 결과

 

 if문 + while문 사용한 코드  실행 결과

 

# 과정

  • if문만 사용한 코드
    • 입력 값은 BufferedReader + InputStreamReader를 사용해서 입력 값 받음.
    • 입력 받은 값은 숫자로 형변환하여 int score에 저장.
    • if문을 사용하여 100~90, 89~80, 79~70, 69~60 점수를 A, B, C, D, E 학점으로 정하고, 나머지는 F학점.
    • 입력된 점수가 0~100 사이의 점수가 아니면 0~100 사이의 점수를 입력 해달라고 출력하기.
  • if문과 switch문 사용한 코드
    • 입력 값은 BufferedReader +InputStreamReader를 사용해서 받음.
    • 입력 받은 값은 숫자로 형변환하여 int score에 저장.
    • if 문을 사용하여 0~100 사이의 점수가 아니면 0~100 사이의 점수를 입력해 달라고 출력.
    • 0~100점 사이의 점수면 switch문을 사용하여 score / 10을 한 다음, case 10, 9는 A학점, 8은 B학점, 7은 C학점, 6은 D학점, 그 이하는 F학점이 출력됨.

 

# 느낀 점

  • if문은 자주 사용해서 이해가 되지만, switch문은 좀 어색했다.
  • 백준에 두 가지 버전의 소스코드를 제출했는데, 메모리와 시간의 차이가 있었다. 궁금해서 왜 차이가 나는지 chat-gpt에 물어봤다.
  • chat-gpt의 말은
    • if-else 문은 조건을 하나씩 비교하면서 순차적으로 실행하기 때문에 속도와 메모리에서 약간의 부담이 있을 수 있다고 했다. 그래서 조건문이 많을수록 더 많은 상태를 유지하려고 해서 메모리 소모가 많을 수 있다고 한다.
    • switch 문은 조건식을 먼저 계산하고 그 값을 기반으로 각 case로 바로 이동하기 때문에 비교 횟수와 메모리 사용이 상대적으로 적다고 했다. 그리고 보통 점프 테이블 방식으로 동작하는데, 이건 조건을 일일히 비교하지 않고 미리 계산된 테이블을 참조하여 빠르게 실행할 수 있도록 도와준다고 한다.
  • 이렇게 하나하나 비교하면서 알아가는 점이 재밌다.