[Algorithm/Python][SWEA] 1204번 최빈수 구하기

동글이·2022년 11월 4일
0

Algorithm

목록 보기
28/33

[SWEA] 1204번 최빈수 구하기

https://swexpertacademy.com/main/code/problem/problemDetail.do

- 문제 접근

  • 순조롭게 해결하였는데 "(단, 최빈수가 여러 개 일 때에는 가장 큰 점수를 출력하라)"가 복병이었다.
  • 해당 요구사항을 만족시키기 위해 앞에서부터 중복되는 배열에 0을 집어 넣어 중복되는 것 중에 가장 큰 인덱스로 이동하였는데 다른 코드를 찾아보니 뒤에서부터 접근하면 더 쉽고 간단하게 된다는 것을 알게 되었다.
  • 조금 더 새로운 아이디어를 찾기 위해 노력하여야 겠다.

- 내 코드

T = int(input())

for i in range(T):
    num = int(input())
    case = list(map(int, input().split()))
    frequency = [0 for i in range(101)]
    for j in range(1000):
        frequency[case[j]] += 1
    maxNum = max(frequency)
    maxIndex = frequency.index(max(frequency))
    while True:
        if maxNum in frequency:
            maxIndex = frequency.index(max(frequency))
            frequency[maxIndex] = 0
        else:
            break
    print("#" + str(num) + " " + str(maxIndex))

- 조금 더 괜찮아 보이는 코드

#D2 1024 최빈수 구하기
t = int(input())
while t:
    #반복횟수를 감소시킴(반복문으로 처리해도 무방함)
    t -= 1
    #몇번째 케이스인지
    case = int(input())
    grade = list(map(int, input().split()))
    lst = [0]*101
    #각 자리수마다 카운팅한다.
    #숫자 1번이 나오면 1번 인덱스에 +1 이런식으로
    for g in grade:
        lst[g] += 1
    #최대값을 찾는다.
    max_num = max(list)
    #최대값과 같은값을 뒤에서부터 찾는다.
    #앞에서 부터 찾으면 정답이 틀릴 수 있다.
    for i in range(100, -1, -1):
        if max_num == lst[i]:
            print(f"#{case} {i}")
            break
profile
기죽지 않는 개발자

0개의 댓글