반응형

안녕하세요 밤샘공부입니다~

[백준 9498번 파이썬]

질문이 있으시면, 아래 오픈채팅방이나 메일로 보내주세요~

2시간 이내에 답변 드리겠습니다. 

 

오픈챗 링크 : https://open.kakao.com/o/srASNxef

메일 주소 : studying.all.night.1114@gmail.com

 

전달력을 높이기 위해 평어체를 사용하였습니다.

 


1. 문제 설명

 

 (1) 문제

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

 

 (2) 입력

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

 

 (3) 출력

  시험 성적을 출력한다.

 

 (4) 예제 

  ① 예시 1

   - 입력

100

   - 출력

A

 

 


2. 문제 해석 및 총평

 

   쉬운 문제 중 알고리즘의 묘미를 알 수 있는 문제로서, 꼭 모범 답안의 풀이를 자신의 것으로 체화시키기를 바란다. (체화시키는 방법은 완벽하게 코드를 이해한 뒤에 1일, 3일, 7일 간격으로 해당 코드를 외워서 쳐보면 충분하다.)

 


3. 코드

 

 (1) 모범답안

#모범 답안
score = int(input())
grade = 'FFFFFFDCBAA' 
print(grade[score//10])

   '???' 라고 생각했을 것이다. (이런 풀이를 처음 접해본 사람이라면) 일단, 자세한 해설을 듣기전에 천천히 코드를 뜯어보며 음미해보자. 이때 우리가 알아야할 기본적인 python 문법이 하나 있는데 string 자료형에도 list와 마찬가지로 '인덱스' 개념이 똑같이 적용된다는 사실이다. 이해를 돕기 위해 이미지 하나를 첨부하자면.

[str자료형과 lst자료형의 인덱싱적 공통점]

이처럼 str자료형 또한 lst자료형과 같이 인덱싱이 적용되며, 이를 이용하여 위 풀이에서는 grade라는 str자료형에 대해 인덱싱 기법을 이용했다. 이때 'score//10'의 의미는 점수를 10으로 나누었을 떄의 몫이라는 의미이다. 즉, 점수가 100점이라면 '10' 점수가 91점이라면 '9' 점수가 80점이라면 '8'을 반환한다. 이러한 방식이 가져오는 편리성은 예를 들어보면 바로 알 수 있다. 예를 들어 문제에서는 80~89 범위 안의 점수라면 B를 출력하라 했으므로 80~89의 수에서 공통점을 찾으면 좋을 것 같은데, 이러한 공통점이 바로 10으로 나누었을 때의 몫이 8이라는 사실이다. 이후 이 몫을 인덱스로 생각하여 grade를 'FFFFFFDCBAA'로 두면 우아하게 문제풀이 끝!

 

 *중간 점검 퀴즈. grade에서 D, C, B는 각각 1개씩 존재하는데 왜 A는 2개일까? (댓글로 답을 달아주시면 좋을 것 같습니다~ 틀려도 괜찮습니다! 모른 상태로 넘어가는 것보다 천만배 낫죠.)

 

 (2) 추가풀이

#추가 풀이
score = int(input())

if score >= 90 :
    print('A')
elif score >= 80 : #위에서 이미 90보다 작은 것은 검증됐으므로, 80 <= score < 90이라 쓸 필요는 없다.
    print('B')
elif score >= 70 :
    print('C')
elif score >= 60 :
    print('D')
else :
    print('F')

   그저 조건문을 써도 좋다. (확실히 모범답안에 비해서는 2% 정도 부족한 느낌이 들죠?)

 

 (3) 추가풀이

#추가 풀이
score = int(input())
grade = ['F', 'F', 'F', 'F', 'F', 'F', 'D', 'C', 'B', 'A', 'A'] 
print(grade[score//10])

  모범 답안에서 stirng이 아니라 list를 쓴 풀이. 

 (4) 추가풀이

#모범 답안
print('FFFFFFDCBAA'[int(input())//10])

   극단적으로 양을 줄여보았다.

반응형