안녕하세요. Harry입니다.
본 포스팅의 목적은, 코딩테스트를 준비함에 있어 SWEA에 제시된 문제 풀이와 스스로 얻은 정보를 정리하고자 합니다.
그러므로 단순히 문제를 푸는 것이 중요한 것이 아니라, 문제를 통해 얻어가는 것이 있어야하기 때문에 접근 방식은 이전 기초 300제를 풀었을 때랑 동일합니다.
[접근 방식]
- 문제에서 요구하는 역량은 무엇인지?
- 알고 있어야하는 지식은 무엇인지? 에 기반하여 풀이하고자 합니다.
[풀이 아이디어]
- 각 등수에 맞는 학점을 주기 위해 grade 리스트를 따로 만든다.
- 비율에 맞게 점수를 통합계산하여 리스트(test_sum)에 모은다.
(이 때, 입력받은 순서대로 리스트에 넣었으므로, 학생번호와 리스트의 인덱스는 일치할 것이다.)
- k번째 학생의 점수와 각 학생의 점수를 비교해서 k번째 학생의 등수를 count 한다.
- 인원 대비 등수에 따라 학점을 줘야하므로 각 학점이 몇등에서 몇등까지 지급되어야하는지 확인한다.
(예를 들어, n = 20명이라면, A+ 는1,2등, A = 3,4등 이런 식)
[코드]
import math
t=int(input())
grade = ['A+','A0','A-','B+','B0','B-','C+','C0','C-','D0']
for i in range(t):
n,k = map(int,input().split())
test = [ list(map(int,input().split() ))for _ in range(n) ]
test_sum = []
for mid_exam,final,task in test:
result = (mid_exam*0.35 + final*0.45 + task*0.2)
test_sum.append(result)
count = 1
for j in range(n):
# k번째 학생 점수보다 점수가 높으면 count 상승(count = 등수)
if test_sum[j] > test_sum[k-1]:
count += 1
# 사람이 10명이면 grade 요소가 각각 등수로 대입 가능
if n == 10:
print('#'+f"{i+1}",grade[count-1])
# 10명이 아니면, grade는 비율에 따라 지정해야 함
else:
print('#' f"{i+1}", grade[math.ceil(count/n*10)-1])
math.ceil 함수가 여기에 쓰이네요..(ceil = 무조건 올림)
math 뿐만 아니라 itertools,deque 등 라이브러리에 대한 공부도 신경써서 놓치지 말아야 할 듯 합니다.
감사합니다.
'Coding Test > 구현' 카테고리의 다른 글
[구현 알고리즘] 1984. 중간 평균값 구하기 (파이썬) (0) | 2023.04.17 |
---|---|
[구현 알고리즘] 1989. 지그재그 숫자 (파이썬) (0) | 2023.04.17 |
[구현 알고리즘] 1989. 초심자의 회문 검사 (파이썬) (0) | 2023.04.17 |
[구현 알고리즘] 2001. 파리 퇴치 (파이썬) (0) | 2023.04.17 |
[구현 알고리즘] 2005. 파스칼의 삼각형 (파이썬) (0) | 2023.04.17 |