난이도 : D2
문제번호 : 1204
※ 저의 풀이가 무조건적인 정답은 아닙니다.
다른 코드가 좀더 효율적이고 좋을 수 있습니다.
다른사람들의 풀이는 언제나 참고만 하시기 바랍니다.
문제 주소 및 출처입니다.
목차
1. 문제 설명
2. 문제 해석
3. 소스 코드
1. 문제 설명
어느 고등학교에서 실시한 1000명의 수학 성적을 토대로 통계 자료를 만들려고 한다. |
제약사항
학생의 수는 1000명이며, 각 학생의 점수는 0점 이상 100점 이하의 값이다. |
입력
첫 번째 줄에 테스트 케이스의 수 T가 주어진다. 각 테스트 케이스의 첫 줄에는 테스트 케이스의 번호가 주어지고 그 다음 줄부터는 점수가 주어진다. |
출력
#부호와 함께 테스트 케이스의 번호를 출력하고, 공백 문자 후 테스트 케이스에 대한 답을 출력한다. |
예시
입력 | 출력 |
홈페이지 참고 | 홈페이지 참고 |
2. 문제풀이
최빈수와 같이 어떤수가 몇번나왔는지 체크할때는 카운팅정렬과 같이 배열의 크기를 넉넉하게 만든다음에(대신 들어오는 수의 크기를 확인) 각 배열의 인덱스를 숫자로 생각하고 카운팅을 하면 편하게 풀 수 있습니다. 주의해야 할점은 동일한 수가 나올경우 큰 점수를 출력해야 하므로 뒤에서부터 접근합니다. |
3. 소스코드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
#D2 1024 최빈수 구하기
t = int(input())
while t:
#반복횟수를 감소시킴(반복문으로 처리해도 무방함)
t -= 1
#몇번째 케이스인지
case = int(input())
grade = list(map(int, input().split()))
lst = [0]*101
#각 자리수마다 카운팅한다.
#숫자 1번이 나오면 1번 인덱스에 +1 이런식으로
for g in grade:
lst[g] += 1
#최대값을 찾는다.
max_num = max(list)
#최대값과 같은값을 뒤에서부터 찾는다.
#앞에서 부터 찾으면 정답이 틀릴 수 있다.
for i in range(100, -1, -1):
if max_num == lst[i]:
print(f"#{case} {i}")
break
|
'코딩테스트 > SWExpertAcademy' 카테고리의 다른 글
전기버스 Python(SW Expert Academy) (0) | 2020.02.23 |
---|---|
Sum Python(SW Expert Academy) (0) | 2020.02.22 |
수도 요금 경쟁 C++(SW Expert Academy) (0) | 2020.02.18 |
아름이의 돌 던지기 C++(SW Expert Academy) (0) | 2020.02.17 |
새로운 불면증 치료법 C++(SW Expert Academy) (0) | 2020.02.16 |
댓글