[Baekjoon] 8979. 올림픽

mj·2024년 5월 27일
0

코딩테스트문제

목록 보기
22/50

문제 바로가기


🔍 문제



🔍 첫번째 코드


# 올림픽

n, k = map(int, input().split())
medals = [] # k나라를 제외한 나라들의 메달 수, 2차원배열
cnt = 1 #등수 = 자신보다 잘하는 나라 수 + 1이므로 나중에 1을 더하지 않기 위해 미리 1로 초기화

for _ in range(n):
    temp = list(map(int, input().split()))
    if temp[0] == k: #k나라인 경우
        mymedal = temp
    else: #k나라가 아닌 경우
        medals.append(temp)

# k나라보다 잘한 나라의 수를 센다.
for arr in medals:
    # 금메달 수 비교
    if arr[1] > mymedal[1]: #k나라보다 금메달 수가 많다면
        cnt+=1
    elif arr[1] == mymedal[1]: #k나라와 금메달 수가 같다면
        #은메달 수 비교
        if arr[2] > mymedal[2]: #금메달수는 같지만 k나라보다 은메달 수가 많다면
            cnt+=1
        elif arr[2] == mymedal[2]: #금메달수, 은메달 수 모두 같다면
            #동메달 수 비교
            if arr[3] > mymedal[3]:
                cnt+=1
    
print(cnt)

코드 풀이

이 문제의 목표는 K 나라의 등수를 구하는 것이다.
"k나라의 등수 = k나라보다 잘하는 나라의 수 + 1" 로 정의된다.

따라서 k나라보다 잘했을 경우를 카운팅해주면 된다.
k나라를 제외한 나라의 메달수를 medals에 저장해두었다.

→ k나라보다 금메달 수가 많으면 count +1
금메달 수가 같다면 은메달 수를 비교한다.
→ 금메달 수가 같고, k나라보다 은메달 수가 많다면 count +1
은메달 수도 같다면 동메달 수를 비교한다.
→ 은메달 수가 같고, k나라보다 동메달 수가 많다면 count +1
Reference


🔍 두번째 코드


# 올림픽

n, k = map(int, input().split())
cnt = 0

# medals = [list(map(int, input().split())) for _ in range(n)]
medals = []
for _ in range(n):
    temp = list(map(int, input().split()))
    if temp[0] == k: #k나라인 경우
        mymedal = temp
    medals.append(temp)

# 정렬 (금-은-동 많은 순으로 정렬)
medals.sort(key = lambda x : (x[1], x[2], x[3]), reverse=True)

# 출력
for arr in medals:
    cnt += 1 #등수 카운팅
    if arr[1:] == mymedal[1:]: # k나라와 금은동 메달수가 모두 같다면
        print(cnt) #등수 출력
        break

🌀 key를 이용한 정렬 sort()

medals.sort(key = lambda x : (x[1], x[2], x[3]), reverse=True)
profile
일단 할 수 있는걸 하자.

0개의 댓글