https://softeer.ai/practice/6250
Softeer - 현대자동차그룹 SW인재확보플랫폼
softeer.ai
1차 코드 - 시간 초과 / 반복 중첩, count 등
n = int(input())
scores = []
total_score = [0] * n
for _ in range(3):
cur = list(map(int, input().split()))
scores.append(cur)
for i in range(n):
total_score[i] += cur[i]
scores.append(total_score)
for score in scores:
result = []
tmp = sorted(score, reverse=True)
for s in score:
count = 1
for i in range(len(tmp)):
if s < tmp[i]:
count += 1
result.append(count)
print(*result)
2차 코드 - 통과 / Counter, dict, hash 활용
from collections import Counter
n = int(input())
scores = []
total_score = [0] * n
# 대회 결과 저장
for _ in range(3):
cur = list(map(int, input().split()))
scores.append(cur)
for i in range(n):
total_score[i] += cur[i]
scores.append(total_score)
# 솔루션
for score in scores:
score_counter = Counter(score)
score_set = list(set(score))
score_set.sort(reverse=True)
score_dic = dict()
token = 1
for s in score_set:
score_dic[s] = token
token += score_counter[s]
result = []
for i in score:
result.append(score_dic[i])
print(*result)
Key Point
- 문제에 나와있는대로, 각 사람마다 “나보다 점수가 큰 사람”의 수를 세어 1을 더한 것이 자신의 등수가 된다. 를 구현하면 풀리는 문제.
복잡하게 생각하고, 어렵게 구현할 필요가 없다.
Counter를 통해, 같은 점수의 개수를 구해주고, 있을 때 마다 순위가 1씩 밀리게 됨.
'코딩 테스트 (Coding Test)' 카테고리의 다른 글
[Softeer] LV.3 플레이페어 암호 - 파이썬 (2) | 2024.02.01 |
---|---|
[Softeer] LV.2 회의실 예약 - 파이썬, zfill() 함수 (2) | 2024.01.30 |
[프로그래머스] 야근 지수 - 파이썬 풀이 (0) | 2023.03.04 |
[프로그래머스] 연속 부분 수열 합의 개수 - 파이썬 풀이 (0) | 2023.01.19 |
[프로그래머스] 2019 카카오 - 오픈채팅방 - 파이썬 풀이 (0) | 2023.01.19 |