공부하자

[BOJ/Python]1159. 농구 경기 본문

Algorithm/BOJ

[BOJ/Python]1159. 농구 경기

dev_riley 2021. 9. 14. 23:19

문제

상근이는 농구의 세계에서 점차 영향력을 넓혀가고 있다. 처음에 그는 농구 경기를 좋아하는 사람이었다. 농구에 대한 열정은 그를 막을 수 없었고, 결국 상근이는 농구장을 청소하는 일을 시작했다. 상근이도 농구장을 청소하면서 감독이 되기 위해 가져야할 능력을 공부해나갔다. 서당개 3년이면 풍월을 읊듯이 상근이는 점점 감독으로 한 걸음 다가가고 있었다. 어느 날 그에게 지방의 한 프로농구팀을 감독할 기회가 생기게 되었다. 그는 엄청난 지도력을 보여주며 프로 리그에서 우승을 했고, 이제 국가대표팀의 감독이 되었다.

내일은 일본과 국가대표 친선 경기가 있는 날이다. 상근이는 내일 경기에 나설 선발 명단을 작성해야 한다.

국가대표팀의 감독이 된 이후에 상근이는 매우 게을러졌다. 그는 선수의 이름을 기억하지 못하고, 각 선수의 능력도 알지 못한다. 따라서, 누가 선발인지 기억하기 쉽게 하기 위해 성의 첫 글자가 같은 선수 5명을 선발하려고 한다. 만약, 성의 첫 글자가 같은 선수가 5명보다 적다면, 상근이는 내일 있을 친선 경기를 기권하려고 한다.

상근이는 내일 경기를 위해 뽑을 수 있는 성의 첫 글자를 모두 구해보려고 한다.

 

<입력>

첫째 줄에 선수의 수 N (1 ≤ N ≤ 150)이 주어진다. 다음 N개 줄에는 각 선수의 성이 주어진다. (성은 알파벳 소문자로만 이루어져 있고, 최대 30글자이다)

 

<출력>

상근이가 선수 다섯 명을 선발할 수 없는 경우에는 "PREDAJA" (따옴표 없이)를 출력한다. PREDAJA는 크로아티아어로 항복을 의미한다. 선발할 수 있는 경우에는 가능한 성의 첫 글자를 사전순으로 공백없이 모두 출력한다.

 

<나의 코드>

N = int(input())
f_dic = {}
for i in range(N):
    data = input()
    for j in range(len(data)):
        if data[0] not in f_dic:
            f_dic.setdefault(data[0]) # 키 값 추가해주기
            f_dic[data[0]] = 1
    else:
        f_dic[data[0]] = f_dic[data[0]] + 1

k_list=[]
fs_dic = sorted(f_dic.items()) # => 사전순으로 정렬, 리스트로 바뀜
for k in range(len(fs_dic)):
    if fs_dic[k][1] > 5:
        print(fs_dic[k][0], end='')
    else:
        k_list.append(fs_dic[k][0])
        if len(k_list) == len(fs_dic):
            print('PREDAJA')

<REVIEW>

이 문제를 통해서 평소에 헷갈렸던 dictionary에 대해서 좀 더 알게되었다. 알고리즘 문제를 풀다보면 보통 for문이나 list를 많이 사용했는데, 생각했던 방식은 dictionary를 쓰면 좋을 것 같아서 하나씩 찾아보며 진행하였다. value 값으로 key값을 찾는 법도 알게되었고, 빈 딕셔너리에 key값을 추가해주는 방법이 여러가지가 있지만 setdefault를 쓰는 방법도 알게되었다. (setdefault값은 key값이 추가되면 value 값은 처음에 다 none을 가진다.) key 값을 생성하는 데에 비교적 간단한 방법도 있어 setdefault값을 정확히 언제 써야 좋을지 모르겠지만 한 가지 더 알게되었다는게 중요한 것 같다. 

dictionary에 대한 지식이 아직 정확하지 않아서 구글에 이리저리 찾아보며 코드를 써내려 갔지만, 쓰인 알고리즘 로직 자체는 내가 처음에 생각한 방식대로 잘 구현이 되어서 기분이 좋았던 문제다.

 

<출처>

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

'Algorithm > BOJ' 카테고리의 다른 글

[BOJ/Python] 10818. 최소, 최대  (0) 2021.10.25
[BOJ/Python] 2562. 최댓값  (0) 2021.10.25
[BOJ/Python] 8979. 올림픽  (0) 2021.09.14
[BOJ/Python] 2804. 크로스워드 만들기  (0) 2021.09.14
[BOJ/Python]2847. 게임을 만든 동준이  (0) 2021.09.10
Comments