이 영역을 누르면 첫 페이지로 이동
Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

페이지 맨 위로 올라가기

Stranger's LAB

프로그래밍과 관련하여 다양한 알고리즘 문제를 풀어보고, 프로그래밍 언어를 이해해 볼 수 있도록 돕고자 만든 블로그 입니다.

[백준] 9498번 : 시험 성적 - [C++]

  • 2021.03.02 21:32
  • C++ - 백준 [BAEK JOON]/조건문
글 작성자: ST_
728x90





 
www.acmicpc.net/problem/9498

 

9498번: 시험 성적

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

www.acmicpc.net

 

 

 









  • 문제



 

 

 

 

워낙 쉬운 문제라 크게 설명 할 게 없다....

 

 

 

 

 

 

 

 





  • 알고리즘 [접근 방법]

 



 

 

이전 문제에서 if-else 조건문에 대해 알아보았다.

 

기본적으로 if-else는 if() 문의 조건을 만족한다면 if문 블럭 안의 내용을 실행하고 만족하지 못한다면 else 문의 블럭을 실행하는 구조였다. 이 문제 또한 똑같은 원리를 적용하면 된다.

 

오늘은 코드를 깔끔하게 최적화하여 작성 하는 방법을 알려주고자 한다.

 

int score;	// 시험점수를 입력받았다고 가정

if(score <= 100 && score >= 90){
	cout << "A";
} 
else if(score < 90 && score >= 80){
	cout << "B";
} 
else if(score < 80 && score >= 70){
	cout << "C";
} 
else if(score < 70 && score >= 60){
	cout << "D";
} 
else {
	cout << "F";
}

 

 

만약 코딩을 막 접한 분들이라면 위와같이 작성하셨을 수도 있다.

 

물론 위 작성 방식도 틀린 것은 아니다.

 

 

 

다만, 조건문 안의 조건식이 길어지고 보는 입장에서도 코드가 더러워 보일 수 있다. 좀 더 깔끔하게 쓰는 방법은 없을까?

 

생각해보자. 조건문 if-else if-else 구조는 기본적으로 아래와 같다.

 

if(조건식 1){
	[실행문 1]	// 조건식 1이 참일경우
} 
else if(조건식 2){
	[실행문 2]	// 조건식 1이 거짓이면서 조건식 2가 참일경우
} 
else if(조건식 3){
	[실행문 3]	// 조건식 1, 2이 거짓이면서 조건식 2가 참일경우
} 
else if(조건식 4){
	[실행문 4]	// 조건식 1, 2, 3이 거짓이면서 조건식 2가 참일경우
} 
else {
	[실행문 5]	// 위 조건식을 모두 만족하지 못했을 경우
}

 

 

즉, 원래 코드를 보면 만약 조건식 1이 90점 이상이었을 때라고 본다면, 조건식 1을 만족하지 못하면 자연스래 그 밑의 else if 문에서는 90점 이상은 만족 못했다는게 확인이 되는 것이다.

 

한마디로 중첩되는 범위에 대해서 앞 조건식에서 걸러진다면 그 아래의 조건식에서는 검사 할 필요가 없는 것이다.

 

코드로 보면 이해가 갈 것이다.

 

int score;	// 시험점수를 입력받았다고 가정

if(score >= 90){	// 주어지는 입력은 100을 넘지 않기 때문에 score <= 100 필요 없음
	cout << "A";
} 
else if(score >= 80){	// 90점 이상은 자연스레 걸러진다.
	cout << "B";
} 
else if(score >= 70){	// 80점 이상은 자연스레 걸러진다.
	cout << "C";
} 
else if(score >= 60){	// 70점 이상은 자연스레 걸러진다.
	cout << "D";
} 
else {	// 60점 이상은 자연스레 걸러진다.
	cout << "F";
}

 

 

 

위와같이 작성하면 좀 더 깔끔하게 만들 수 있다. 또한 위 처럼 작성한다면 장점이 조건식 검사를 줄여 효율이 좋아진다는 것이다.

 

원래 작성했던 코드를 보자.

score <= 100 && score >= 90      ->  조건 검사 2번

score < 90 && score >= 80      ->  조건 검사 2번

score < 80 && score >= 70      ->  조건 검사 2번

score < 70 && score >= 60      ->  조건 검사 2번

 

최악의 경우, 즉 else문까지 오게 될 경우 총 8번의 조건 검사를 거쳐가야 한다.

 

 

하지만, 조건식을 최소화 한 코드를 보면 절반으로 총 4번의 조건 검사 밖에 안한다.

 

 

 

당장에는 제출하더라도 큰 차이는 없어 보일 수는 있어도, 후에 조건식이 복잡해지거나 반복적으로 검사하게 될 경우 이러한 차이에서 속도(시간)이 차이가 날 수 있다.

 

그러니 항상 문제를 보면 1차적으로 작성한 뒤, 어떻게 코드를 더욱 최적화 할 수 있을지 고민해보는 습관을 들이면 좋을 것 같다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 





  • 1가지 방법을 사용하여 풀이한다.

 



이전 포스팅까진 stdio.h 로 C라이브러리를 이용한 입출력도 보여주었지만, 앞으로는 꼭 필요한 상황이 아닌 이상 C++ 표준 라이브러리로 풀 것이다.

이는 C++ 를 배우신 분이라면 알겠지만, 사실 C와 C++은 얼핏 비슷한 언어처럼 보이고 상호 호환도 가능하지만, 언어 지향점은 많이 상이하기 때문이다.

 

이 부분에 대해서는 이후에 다룰 수 있는 기회가 된다면 따로 다루기로 하겠다.

 

 

 

 

 

 






  • 풀이





- 방법 1

 

#include <iostream>
using namespace std;

int main(int argc, char const *argv[])
{
    
    int score;
    cin >> score;

    if(score >= 90){
        cout << "A";
    } 
    else if(score >= 80){
        cout << "B";
    } 
    else if(score >= 70){
        cout << "C";
    } 
    else if(score >= 60){
        cout << "D";
    } 
    else {
        cout << "F";
    }
    
    return 0;
}

 

 

 

 

 

 

 

 

 

 

 

 

 

 





  • 성능






 

 

 

채점 번호 : 26896598  -  방법 1 

 

 

 

 








  • 정리

 



 

오늘은 간단한 조건문에 대해 어떻게 코드의 가독성을 높이고 최적화를 하는지 맛보기로 알아보았다.

 

크게 어려울 건 없었던지라 그다지 설명 할 것도 없긴 하나, 혹여 어렵거나 이해가 되지 않은 부분이 있다면 언제든 댓글 남겨주시면 최대한 빠르게 답변드리겠다.

 

 



저작자표시 비영리 변경금지 (새창열림)

'C++ - 백준 [BAEK JOON] > 조건문' 카테고리의 다른 글

[백준] 2525번 : 오븐 시계 - [C++]  (0) 2022.07.24
[백준] 2844번 : 알람 시계 - [C++]  (2) 2021.03.15
[백준] 1468번 : 사분면 고르기 - [C++]  (0) 2021.03.11
[백준] 2753번 : 윤년 - [C++]  (0) 2021.03.09
[백준] 1330번 : 두 수 비교하기 - [C++]  (0) 2021.02.28

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [백준] 2844번 : 알람 시계 - [C++]

    [백준] 2844번 : 알람 시계 - [C++]

    2021.03.15
  • [백준] 1468번 : 사분면 고르기 - [C++]

    [백준] 1468번 : 사분면 고르기 - [C++]

    2021.03.11
  • [백준] 2753번 : 윤년 - [C++]

    [백준] 2753번 : 윤년 - [C++]

    2021.03.09
  • [백준] 1330번 : 두 수 비교하기 - [C++]

    [백준] 1330번 : 두 수 비교하기 - [C++]

    2021.02.28
다른 글 더 둘러보기

정보

Stranger's LAB 블로그의 첫 페이지로 이동

Stranger's LAB

  • Stranger's LAB의 첫 페이지로 이동

검색

나의 외부 링크

  • st-github

공지사항

  • 공지 - 블로그 사용 설명서

메뉴

  • 홈
  • 방명록

카테고리

  • 전체 카테고리 (267)
    • Java (5)
    • JAVA - 백준 [BAEK JOON] (177)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (10)
      • 기본 수학 1 (8)
      • 기본 수학 2 (6)
      • 2차원 배열 (0)
      • 정렬 (10)
      • 재귀 (4)
      • 브루트 포스 (5)
      • 집합과 맵 (0)
      • 기하 1 (5)
      • 정수론 및 조합론 (12)
      • 백트래킹 (8)
      • 동적 계획법 1 (15)
      • 누적 합 (0)
      • 그리디 알고리즘 (5)
      • 스택 (5)
      • 큐, 덱 (7)
      • 분할 정복 (9)
      • 이분 탐색 (7)
      • 기타 문제 (17)
      • 별 찍기 문제 모음 (2)
    • C++ - 백준 [BAEK JOON] (46)
      • 입출력과 사칙연산 (14)
      • 조건문 (7)
      • 반복문 (11)
      • 1차원 배열 (7)
      • 함수 (3)
      • 문자열 (0)
      • 기타 문제 (4)
    • 자료구조 (18)
      • Java (18)
    • 알고리즘 (11)
      • Java (11)
    • 프로그래밍 기초 (6)
    • 이모저모 (2)
    • 일상의 글 (2)

최근 글

정보

ST_의 Stranger's LAB

Stranger's LAB

ST_

블로그 구독하기

  • 구독하기
  • 네이버 이웃 맺기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © ST_.

티스토리툴바