본문 바로가기
C#/C# : Baekjoon

[백준] C# : 시험 성적 (9498번)

by TODAYCODE 2021. 7. 22.
반응형

백준 단계별로 풀어보기 2단계 if문 2번문제

 

9498번: 시험 성적

시험 점수를 입력받아 90 ~ 100점은 A, 80 ~ 89점은 B, 70 ~ 79점은 C, 60 ~ 69점은 D, 나머지 점수는 F를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

문제의 핵심

1. if문으로 다양한 경우의 조건을 분류할 수 있는가?

2. switch문 변형으로 간략하게 표현해보자.

 

하단에 if문과 switch문 두가지로 정답을 올려두었다.


if문으로 문제를 풀 때는

else if를 사용해서 경우를 분리해주면

아주 간단하게 해결 할 수 있다.

 

딱히 설명할 것이 없다.

 

 

 

마찬가지로 이 문제도 switch로 해결할 수 있는데,

이번에는 변형된 switch문으로 풀어보고자 한다.

 

정답으로 출력할 string 문자열을 선언할 때

switch문을 함께 사용해서 점수별로 각각 해당 등급의 문자가 입력되도록 하는 방식이다.

 

 

 

문자열을 입력받아서 바로 int형으로 바꾸는 또 다른 방식.

int input = Convert.ToInt32(Console.ReadLine());

 

if문에서 범위 형태로 케이스 분류를 했으니 이번에는 다른 방식으로 분류를 해보자.

 

int score = (int)(Math.Truncate(input / 10.0) * 10);

Math.Truncate는 소수점을 없애준다.

즉, 입력된 점수를 10으로 나눈 다음에 소수점을 없애고 다시 10을 곱해준다.

따라서

99~90은 전부 90으로,

89~80은 전부 80으로

이렇게 변환되는 것.

100점은 당연히 100이다.

 

 

그리고 이제 string을 선언하면서 스위치문을 사용해보도록 하자.

string grade = score switch { 조건에따른분류 };

이렇게 선언하면 된다.

해석해보면

 

grade라는 이름으로 문자열을 선언하는데 저장할 문자열은

앞서서 입력받은 score를 스위치문으로 분류해서 { } 내부의 조건에 따라서 입력되는 방식이다.

 

{    90 => "A",

    80 => "B",

      70 => "C"  };

 

{} 내부에는 이런식으로 적어준다.

앞에 숫자는 스위치문으로 나눠질 경우를 써준다.

'=>' 뒤에는 해당 경우일 때 입력될 문구를 적어준다.

그리고 끝에 꼭 세미콜론을 적어주는 것을 잊으면 안된다.

 

그럼 점수별로 문자열이 각각 알맞게 입력되는 스위치문이 완성된다.

이 경우에도 when절을 사용해서 추가적인 조건 검색을 할 수 있다.

 

 

 

 

if문 정답코드

using System;

namespace 조건문2
{
    class Program
    {
        static void Main(string[] args)
        {
            int x = int.Parse(Console.ReadLine());
            
            if (x >= 90)
            {
                Console.WriteLine("A");
            }
            else if (x >= 80)
            {
                Console.WriteLine("B");
            }
            else if (x >= 70)
            {
                Console.WriteLine("C");
            }
            else if (x >= 60)
            {
                Console.WriteLine("D");
            }
            else
            {
                Console.WriteLine("F");
            }
        }
    }
}

 

switch문 정답 코드

using System;

namespace 조건문2
{
    class Program
    {
        static void Main(string[] args)
        {
        	// 입력받아서 int형으로 전환
            int input = Convert.ToInt32(Console.ReadLine());
            
            // 1의자리 버리면서 숫자 동일하게 설정
            int score = (int)(Math.Truncate(input / 10.0) * 10);
            
            // 추가 조건 검색
            bool repeated = false;
            
            // 문자열을 선언하면서 곧장 스위치문 사용
            string grade = score switch
            {
                100 => "A",
                90 => "A",
                // 추가 조건 검색 가능
                80 when repeated == true => "B+",
                80 => "B",
                70 => "C",
                60 => "D",
                _ => "F"
            };

            Console.WriteLine(grade);
        }
    }
}
반응형

댓글