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씩 밀리게 됨.

+ Recent posts