본문 바로가기

별걸다하는 IT/알고리즘 문제풀이

[백준 Baekjoon 알고리즘]9498번 시험 성적, 10817번 세 수 문제 풀이 (if문 switch 연습 문제)

백준 알고리즘 문제풀기 : 난이도 하


정답 비율 62.7%

[9498] 시험 성적

문제

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

조건

시간 제한 1초, 메모리 제한 128MB

입출력

입력

첫째 줄에 시험 점수가 주어진다. 시험 점수는 0보다 크거나 같고, 100보다 작거나 같은 정수이다.

출력

시험 성적을 출력한다.

 

예제 

입력: 100

출력: A

 


정답 비율 47.4%

[10817] 세 수

문제

세 정수 A,B,C가 주어진다. 이때 두 번째로 큰 정수를 출력하는 프로그램을 작성하시오.

조건

시간 제한 1초, 메모리 제한 256MB

입출력

입력

첫째 줄에 세 정수 A,B,C가 공백으로 구분되어 주어진다. (1<=A,B,C <=100)

출력

두 번째로 큰 정수를 출력한다.

예제 입력 예제 출력
20 30 10  20
30 30 10 30
40 40 40 40
20 10 10 10

 

 

 

ANSWER

문제를 보면 알겠지만 단순 if문 문제입니다. 아주~~ 초반 프로그래밍 언어 배울 때 if문 문법에서 한 번쯤 풀어본 기본문제가 아닐까 싶어요.

쌍으로 맨날 엮이는 if문하고 switch문으로 풀어봅시다.

 

[9498 시험성적 문제 JAVA - IF]

오늘은 자바부터! Scanner로 입력받고 단순 if문으로 판별한뒤 출력해주는 가장 간단한 코드부터~~

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import java.util.Scanner;
class Main{
    public static void main(String[] args){
        String grade;
        Scanner sc = new Scanner(System.in);
        int score = sc.nextInt();
        if(90<= score && score <= 100){
            grade ="A";
        }else if(80 <= score && score <90){
            grade ="B";
        }else if(70 <= score && score <80){
            grade = "C";
        }else if(60 <= score && score <70){
            grade = "D";
        }else{
            grade ="F";
        }
        System.out.println(grade);
    }
}
cs

[9498 시험성적 문제 JAVA - SWITCH]

그 다음 switch문을 함 볼까요

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import java.util.Scanner;
class Main{
    public static void main(String[] args){
         String grade;
         Scanner sc = new Scanner(System.in);
         int score = sc.nextInt();
         switch(score/10){
             case 9case 10:
                 grade ="A"break;
             case 8:
                 grade ="B"break;
             case 7:
                 grade ="C"break;
             case 6:
                 grade ="D"break;
             default:
                 grade="F";
         }
         System.out.println(grade);
    }
}
cs

문법만 알고 있으면 크게 어려울 것이 없는 문제입니다. 

 

[9498 시험성적 문제 C - if]

C도 if문이나 switch문법은 같아요. 똑같으니까 switch문은 생략하고 if문만 보고 갈게요 C++의 경우도 마찬가지로 입출력 함수만 cin, cout으로 바꿔주면 되겠죠?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
int main()
{
    int score; char grade;
    scanf("%d",&score);
    if(90<= score && score <= 100)
         grade ='A';
     else if(80 <= score && score <90)
         grade ='B';
     else if(70 <= score && score <80)
         grade = 'C';
     else if(60 <= score && score <70)
         grade='D';
     else
         grade ='F';
     printf("%c", grade);
     return 0;
}
cs

참고로 if문을 이렇게 하나하나 비교해줘도 되지만

이중 if문을 써서 풀이해줘도 좋습니다.

이렇게! 요런 방식으로 ㅎㅎ

 

[10817 세수 문제 C++ 단순 if]

두 번째 세 수 문제로 넘어갈게요.

가장 일차적인 문제로 접근해서 풀어봅시다. 일단 큰 수대로 줄세우려면 비교가 필요하겠죠?

 

한 번 로직을 짜볼게요

a>b 일 경우 

      b>c이면 b가 답

      c>b 이면 a와 c를 비교해서 작은 게 답

b>a 일 경우

      a>c이면 a가 답

      c>a이면 b와 c를 비교해서 작은게 답

 

이렇게 될 거예요 이 로직을 코드로 그대로 옮기면

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
using namespace std;
int main()
{
    int a, b, c, result;
    cin>>a>>b>>c;
    if(a>b){
        if(b>c){
            result = b;
        } else{
            if(a>c){
                result = c;
            }else{
                result = a;
            }
        }
    }else{
        if(a>c){
            result = a;
        }else{
            if(b>c)
                result = c;
            else
                result = b;
        }
    }
    cout<<result;
    return 0;
}
cs

이렇게 코드를 작성할 수 있습니다. 그런데 너무 길지 않나요? 이 복잡한 if문을 삼항연산자로 줄여볼게요 

result = (a>b)?(b와 c를 비교) : (a와 c를 비교);

b와 c를 비교를 다시 한 번 풀면

(b>c)? b : (a와 c를 비교)  ==>  (b>c)? b : ((a>c)? c: a)

이번에는 a와 c를 비교 부분을 풀면

(a>c)? a: (b와 c를 비교) ==> (a>c)? a: ((b>c)? c: b)

이걸 정리하면 아래와 같은 코드로 줄일 수 있습니다. 괄호가 많다보니까 작성할 때 실수하지 않게 조심해주세요

1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main()
{
    int a, b, c, result;
    cin>>a>>b>>c;
    result = (a>b)?((b>c)? b:(a>c)?c:a):((a>c)? a: ((b>c)? c: b));
    cout<<result;
    return 0;
}
cs

근데 좀 코드를 보고 이해하기 힘들죠??ㅎㅎ

 

[10817 세수 문제 C++ - sort함수 이용]

어차피 비교문 연습문제라 이렇게 작성해주는게 원칙이지만 알고리즘 헤더의 sort함수를 이용해서 풀 수도 있어요 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <algorithm>
#include <iostream>
using namespace std;
int main()
{
    int arr[3];
    int size = sizeof(arr)/ sizeof(arr[0]);
    for(int i=0; i<size; i++)
    {
        cin>>arr[i];
    }  
    sort(arr, arr+size); 
    cout<<arr[1];
    return 0;
}
cs

 

[10817 세수 문제 JAVA - sort함수 이용]

이를 자바로 푼다면 Arrays의 sort 메서드를 대신 사용해주면 되겠죠?

1
2
3
4
5
6
7
8
9
10
11
12
13
import java.util.Scanner;
import java.util.Arrays;
class Main{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        int[] arr = new int[3];
        for(int i=0; i<arr.length; i++){
            arr[i] = sc.nextInt();
        }
        Arrays.sort(arr);
        System.out.println(arr[1]);
    }
}
cs