문제
시험 점수를 입력받아 90~100점은 A, 80~89점은 B, 70~79점은 C, 60~69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.
입력 조건
첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.
출력 조건
시험 성적을 출력한다.
풀이
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int A = scanner.nextInt();
if (A >= 90) {
System.out.println("A");
} else if (A >= 80){
System.out.println("B");
} else if (A >= 70) {
System.out.println("C");
} else if (A >= 60) {
System.out.println("D");
} else {
System.out.println("F");
}
}
}
그냥 정해진 조건대로 쭉쭉 적어봤다.
크게 생각할 부분이 없어서 좋았던 것 같다.
뭔가 반복되는 부분이 많아서 switch문을 사용하면 좀 나으려나 싶었는데
간단한 조건은 if문이 더 효율이 좋다고 해서 이게 맞겠지? 싶었다.
익숙하진 않지만 삼항 연산자를 쭉 늘려놓으면 이렇게도 표현이 가능하다고 한다.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
System.out.println(score >= 90 ? "A" : score >= 80 ? "B" : score >= 70 ? "C" : score >= 60 ? "D" : "F");
}
}
예전에 리액트 배울때 수정 기능할 때 이렇게 다중으로 삼항연산자를 사용했던 기억이 있다.
보자마자 이런 생각을 하려면 얼마나 많은 문제를 만나야하는 걸까 싶다. (솔직히 가독성은 길어도 첫 코드가 나은거 같긴하다.)
switch문 사용해서도 해보기
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
Grade grade = Grade.of(score);
switch (grade) {
case A:
System.out.println("A");
break;
case B:
System.out.println("B");
break;
case C:
System.out.println("C");
break;
case D:
System.out.println("D");
break;
case F:
System.out.println("F");
break;
}
}
막상 써보려니깐 범위는 어디에 적어야할지 너무 막막해서 시간을 더 쓰기엔 무리가 있어서 gpt의 도움을 받았다.
import java.util.Scanner;
public class Main {
enum Grade {
A(90, 100), B(80, 89), C(70, 79), D(60, 69), F(0, 59);
private final int lower;
private final int upper;
Grade(int lower, int upper) {
this.lower = lower;
this.upper = upper;
}
public static Grade of(int score) {
for (Grade grade : values()) {
if (score >= grade.lower && score <= grade.upper) {
return grade;
}
}
throw new IllegalArgumentException("Invalid score: " + score);
}
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int score = scanner.nextInt();
Grade grade = Grade.of(score);
switch (grade) {
case A:
System.out.println("A");
break;
case B:
System.out.println("B");
break;
case C:
System.out.println("C");
break;
case D:
System.out.println("D");
break;
case F:
System.out.println("F");
break;
}
}
}
enum 클래스는 스프링 부트로 만들때만 사용해보았는데 이런 식으로 여기서도 사용이 가능하다는 것을 처음 알게 되었다.
Grade(int lower, int upper) {
this.lower = lower;
this.upper = upper;
}
아마 Grade 내부에 정의한 것들을 lower, upper로 범위를 정의해주기 위해 사용이 된 것 같다. (내 머리에선 나올 수 없는...)
AI라 그런지 내 코드와는 간결함이나 질이 다른 것 같다🤬
switch문은 이런 간단한 식을 사용할 때 오히려 코드가 길어지고 효율이 떨어진다는 것만 알아가려고 한다.
3가지 방법으로 전부 통과했다.
개인적으로는 삼항 연산자가 제일... 멋있는? 효율도 좋고 그래보인다. (가독성을 포기하면)
정리
enum 클래스는 False, True 라던지 뭐 약간 열거형? 으로 다른 클래스를 만들어서 가져올 때만 사용해보았는데 이렇게도 활용이 가능하구나 싶었다. 무엇보다 if문과 switch문을 공부하는데 공을 꽤 들였다고 생각했는데 switch문은 단순하게 기본형태만 기억할 뿐 활용을 하지 못하는 것을 보고 무조건 많이 쳐보는게 좋다는 생각이 들었다. 추가로 AI가 확실히 코드를 잘 짠다...
'Knowledge > Algorithm' 카테고리의 다른 글
[14681/JAVA] 사분면 고르기 (0) | 2023.12.20 |
---|---|
[1330/JAVA] 두 수 비교하기 (0) | 2023.12.20 |
[10699/JAVA] 오늘 날짜 (0) | 2023.12.19 |
[18108/JAVA] 1998년생인 내가 태국에서는 2541년생?! (0) | 2023.12.18 |
[10926/JAVA] ??! (0) | 2023.12.16 |
쓰임 있는 사람이 되기 위해 노력 중입니다.