티스토리 뷰

728x90

Finding 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))
728x90
LIST
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
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
글 보관함