본문 바로가기

백준 문제풀이

[파이썬] 백준 문제 15702번 문제풀이 및 해답

728x90

백준 문제 15702번 중간고사 채점 문제의 풀이와 해답입니다.

 

 

문제, 입력과 출력입니다. 

 

응시자 수와 문제의 개수를 입력받고 배점을 입력 받은 후 배점의 따라 응시자의 점수를

비교해 높은 점수를 받은 응시자를 찾아내는 문제입니다.

 

1. 입력

 

# 문제 개수 N 응시자 수 M 입력
nm = list(map(int,input().split(" ")))
n = nm[0]
m = nm[1]



# 문제의 배점
point = list(map(int,input().split(" ")))

stu = []

# 응시자 정보
for j in range(m):
    st = input().split(" ")
    st[0] = int(st[0])
    stu.append(st)

 

먼저 문제의 개수와 응시자의 수를 입력받습니다.

 

다음 문제의 배점을 입력받습니다.

 

빈 리스트를 하나 선언하고

응시자의 정보를 입력받습니다.

 

여기서 응시 번호는 int형이므로 꼭 형 변환을 해줍시다.

 

2. 점수 비교

 

sum = []
sum_point = 0

# 점수체크
for i in range(m):
    for j in range(n):
        if stu[i][j+1] == "O":
            sum_point+=point[j]
    sum.append(sum_point)
    sum_point = 0

 

첫번째 반복문은 응시자의 수만큼 돌려주도록 합시다.

 

두번째 반복문은 문제의 개수만큼 반복합니다.

 

만약 n번째 응시생의 정답 유무가 O라면 배점만큼 n번째 응시생의 점수에 더합니다.

 

그 후 더한 값을 sum 리스트에 append 해줍니다.

sum_point 변수는 꼭 초기화 해주도록 합시다.

 

3. 출력

 

lage_point = sum[0]
lage_stu = stu[0][0]

# 출력
for i in range(m):
    if lage_point ==sum[i]:
        if lage_stu > stu[i][0]:
            lage_stu = stu[i][0]
    elif lage_point < sum[i]:
        lage_point = sum[i]
        lage_stu = stu[i][0]
print(lage_stu, lage_point)

 

먼저 첫번째 점수와 첫번째 학생의 응시 번호를 저장합니다.

 

반복문은 응시생의 수만큼 반복하고

만약 첫번째 응시생 점수와 다음 응시생 점수가 같다면

응시생의 수험번호가 더 작은 수험번호를 저장합니다.

 

두 응시생의 점수가 같지 않다면 

만약 첫번째 응시생의 점수가 두번째 응시생의 점수보다 작다면

두번째 응시생의 점수를 변수에 넣어줍니다.

 

또한 해당 응시생의 수험번호를 저장합니다.

 

4. 결과 확인

 

 

 

예제와 같은 결과가 나오는 모습을 볼 수 있습니다.

 

baekjun15702.py
0.00MB

728x90
반응형