# 문제
- 주소: https://www.acmicpc.net/problem/9498
- 시험 점수를 입력 받아 각 점수에 맞는 학점 출력하기.
# 코드
- 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로 바로 이동하기 때문에 비교 횟수와 메모리 사용이 상대적으로 적다고 했다. 그리고 보통 점프 테이블 방식으로 동작하는데, 이건 조건을 일일히 비교하지 않고 미리 계산된 테이블을 참조하여 빠르게 실행할 수 있도록 도와준다고 한다.
- 이렇게 하나하나 비교하면서 알아가는 점이 재밌다.
'코딩 테스트' 카테고리의 다른 글
[코딩테스트] 백준 14681번: 사분면 고르기 (0) | 2025.05.09 |
---|---|
[코딩테스트] 백준 2753번: 윤년 (0) | 2025.05.09 |
[코딩테스트] 백준 1330번: 두 수 비교하기 (0) | 2025.05.08 |
[코딩테스트] 백준 10172번: 개 (0) | 2025.05.08 |
[코딩테스트] 백준 10171번: 고양이 (0) | 2025.05.08 |