Algorithm

[백준][python]1159 농구경기

soduddl1 2023. 7. 5. 13:00

문제

https://www.acmicpc.net/problem/1159

소스코드

import sys
input = sys.stdin.readline
if __name__ == "__main__":
    n = int(input())
    dic = {}
    for _ in range(n):
        name = input().rstrip()
        if name[0] not in dic:
            dic[name[0]] = 1
        else:
            dic[name[0]] +=1
            
    res = []
    for k,v in dic.items():
        if v >= 5:
            res.append(k)
    if len(res) > 0:
        res.sort()
        print(''.join(res))
    else:
        print('PREDAJA')

설명

  • 이름을 입력받고, 성의 앞글자를 딕셔너리에 추가한다.
  • 딕셔너리를 탐색해서 value 가 5개가 넘으면
  • 알파벳 순으로 정렬해서 출력한다.

후기

1등은 비공개이고 2등 소스를 확인해보았다.
시간은 나와 4ms 차이밖에 안나지만 걍 딱 봐도 너무너무 효율이 좋아보였다 ;;
 
  • 입력 자체를 아예 이름의 첫글자만 받았고
  • 아스키 코드를 기준으로  for문으로 탐색했다. 이렇게 하면 정렬 할 필요가 없다.
  • arr.count(chr(i)) >= 5 로직으로 해당 아스키 코드가 5개가 넘으면 체크해주고 그때그때 출력, 이때 end = '' 써서 이어주었다.
같은 생각이지만 어떻게 푸느냐에 따라 다르게 표현된게 본받을 점인 것 같다.