티스토리 뷰
[Python/Hackerrank] Basic Data Types > Finding the percentage
hoojiv 2021. 12. 7. 23:07Finding the percentage
The provided code stub will read in a dictionary containing key/value pairs of name:[marks] for a list of students. Print the average of the marks array for the student name provided, showing 2 places after the decimal.
Example
Input Format
The first line contains the integer n, the number of students' records. The next n lines contain the names and marks obtained by a student, each value separated by a space. The final line contains query_name, the name of a student to query.
Constraints
Output Format
Print one line: The average of the marks obtained by the particular student correct to 2 decimal places.
Sample Input 0
3
Krishna 67 68 69
Arjun 70 98 63
Malika 52 56 60
Malika
Sample Output 0
56.00
Explanation 0
Sample Input 1
2
Harsh 25 26.5 28
Anurag 26 28 30
Harsh
Sample Output 1
26.50
문제해석
1. input 값은 아래와 같고 단순히 사람과 그 사람의 점수를 입력받은 후 query_name 값으로 들어온 사람의 점수 평균을 구하여 출력하면 된다. 이 때 사람 당 marks[]의 개수는 3개로 고정되어 있고, 결과값은 소수점 2자리까지 출력되어야 한다.
n : 입력될 사람의 수
name : 사람이름
marks[] : 점수 배열
query_name : 사람이름 -> 이 사람의 점수의 평균을 출력하면 된다.
3
Krishna 67 68 69
Arjun 70 98 63
Malika 52 56 60
Malika
문제풀이
지난 문제에서 너무 간단한 코드에 충격을 먹고 간결하게 작성해 보려고 노력하였다.
query_name = input() 까지는 입력받는 기본 코드이고 3줄로 완성시켰다!
if __name__ == '__main__':
n = int(input())
student_marks = {}
for _ in range(n):
name, *line = input().split()
scores = list(map(float, line))
student_marks[name] = scores
query_name = input()
#marks = [b for a, b in student_marks.items() if a == query_name][0]
marks = student_marks.get(query_name)
avg = sum(marks)/len(marks)
print("{:.2f}".format(avg))
1. 우선 입력값인 student_marks의 값은 아래처럼 key:value 형태로 되어 있는데 찾아보니 이런 형태를 dict(딕셔너리)라 한다고 한다. dict에서 값을 가려오려면 students_marks.get('Krishna')와 같이 get() 함수를 사용한다고 한다.
{'Krishna': [67.0, 68.0, 69.0], 'Arjun': [70.0, 98.0, 63.0], 'Malika': [52.0, 56.0, 60.0]}
marks = student_marks.get(query_name) 구문을 사용하여 query_name에 맞는 점수 리스트를 가져오고 marks에 저장한다. 처음에는 이렇게 하지 않고 for문에서 student_marks.items()을 사용해 가져오도록 했는데 [[ ]] 이런식으로 괄호가 2개인 nested list가 되어 [0]을 붙여주었다. (나중에라도 참고하면 좋을 듯하다.)
[b for a, b in student_marks.items() if a == query_name] ==> [[52.0, 56.0, 60.0]]
[b for a, b in student_marks.items() if a == query_name][0] ===> [52.0, 56.0, 60.0]
student_marks.get(query_name) ===> [52.0, 56.0, 60.0]
2. 점수가 저장된 marks는 기본적인 list이므로 관련 함수를 사용할 수 있다. sum(), len() 함수를 사용하여 평균 값을 구해 주었다.
3. 마지막으로 소수점 2자리까지 출력하기 위해 format() 함수를 사용하였다. "{:.2f}".format() 이렇게 사용하면 원하는 결과가 나온다.
Discussions
다른코드1. get()함수를 사용하지 않아도 그냥 접근이 가능했다.....ㅡ.ㅡ;
query_scores = student_marks[query_name]
print("{0:.2f}".format(sum(query_scores)/(len(query_scores))))
다른코드2. 어차피 점수는 3개까지 입력된다고 조건에 있으므로 a,b,c 이런식으로 해서 각 값으로 가져올 수도 있나보다.
a,b,c = student_marks[query_name]
print('%.2f'%((a+b+c)/3))
'Programming > Python' 카테고리의 다른 글
[Python/Hackerrank] Basic Data Types > Tuples (0) | 2021.12.08 |
---|---|
[Python/Hackerrank] Basic Data Types > Lists (0) | 2021.12.08 |
[Python/Hackerrank] Basic Data Types > Nested Lists (0) | 2021.12.06 |
[Python/Hackerrank] Basic Data Types > Find the Runner-Up Score! (0) | 2021.12.06 |
[Python/Hackerrank] Basic Data Types > List Comprehensions (0) | 2021.12.06 |
- Total
- Today
- Yesterday
- 매매일지
- SQL Server
- 넷플릭스
- tensorflow
- mysql
- HK이노엔
- 리비안
- MS SQL Server
- 대원화성
- python
- MSSQL
- DATABASE
- TSQL
- 분석탭
- string
- Weather Observation Station
- 코로나19
- list
- 에코캡
- 해커랭크
- 테슬라
- 미중무역전쟁
- 동국알앤에스
- Tableau
- insert
- 넥스트BT
- 몰누피라비르
- hackerrank
- python3
- 경구치료제
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |