workspace/algorithm

[백준/Python] #14724 관리자는 누구?

HwangJerry 2023. 2. 2. 22:53

문제

 

14724번: 관리자는 누구?

PROBRAIN, GROW, ARGOS, ADMIN, ANT, MOTION, SPG, COMON, ALMIGHTY중 동문 커뮤니티 관리자로 선발되는 후보가 소속한 동아리의 이름을 대문자로 출력한다.

www.acmicpc.net

 

문제 해석

9개의 동아리 부원들이 백준 문제를 각각 풀었는데,

1. 각 동아리 (최소) 부원 수는 계속 달라지며

2. 각 동아리별로 백준 문제를 가장 많이 푼 사람이 그 동아리의 대표가 되고

3. 동문 커뮤니티 관리자는 모든 동아리 대표 중 가장 많은 문제를 푼 사람이 된다.

4. 단, 여기서 각 동아리의 순서는 고정이다.

 

문제 풀이

우선 동아리 이름 별로 대표가 존재하고 그 대표가 푼 문제 수가 중요하므로, 동아리 이름과 그 동아리 대표가 푼 문제 수를 묶는 딕셔너리 타입이 적절하다고 판단하였다.

또한 동아리 순서는 고정되어 있으므로 동아리 이름을 리스트(club_name_list)에 넣어두고 반복문 안에서 빈 딕셔너리의 키값을 동아리 이름으로, 그 밸류를 그 동아리 대표가 푼 문제 수로 하여 선언하고자 했다.

그리고 그 반복문 안에서 동시에 이전 인덱스와 비교하여 가장 큰 밸류 값을 지니는 키 값(동아리 이름)을 ans 라는 전역변수에 담아서 출력하면 되겠구나 했다.

코드 전문

# 동아리 이름 club_name_list에 넣어두고
# 빈 딕셔너리 하나 선언
# n 에 부원 수 값 넣어두고

# for idx in range(9): 9개 클럽 돌리기
# list(map(int, input().split()))으로 부원 정보 받음
# 반복문 돌면서 딕셔너리에 D[club_name_list[i]] = max(num_list) 입력
# D[club_name_list[i-1] 과 D[club_name_list[i] 크기 비교하여 이긴놈 ans 에 저장

# print(ans)

club_name_list = ["PROBRAIN", "GROW", "ARGOS", "ADMIN", "ANT", "MOTION", "SPG", "COMON", "ALMIGHTY"]
D = dict()
n = int(input()) # 동아리 부원 수
ans = ""
temp = 0

for idx in range(9):
    score_list = list(map(int, input().split()))
    D[club_name_list[idx]] = max(score_list)
    if D[club_name_list[idx]] > temp:
        temp = D[club_name_list[idx]]
        ans = club_name_list[idx]
print(ans)

 

궁금증

동아리 부원 수가 주어지는데 나는 이걸 사용하지 않는 로직으로 푼 거라 꺼림찍하다. 이 것보다 더욱 효율적으로 풀 수 있을 것 같은 느낌이 드는데 지금 봐서는 번뜩이는 아이디어가 생각나지 않는다. 나중에 다시 봐보고 싶다. 아무리 봐도 로직이 마음에 들지 않는다.