백준_11652 (카드_실버4_정렬) 호석 정렬1

RostoryT·2022년 8월 13일
0

Sorting and Recursive

목록 보기
7/11



메모

1안)
Counter쓰면되는거아니냐?
-->근데 정답률 낮은걸보니 시간초과뜨는듯

2안)
전부 입력받고
sort()시키고
방문 배열 하나 만들어서 i에 해당하는거에 ++해주면 되는거아님?


솔루션 코드 - 내가푼 - 오답

  • 2안으로 풀었을 때 --> 인덱스 에러 : 수가 -2^62 인걸 잘못봤네.. (cnt배열에서 에러)
import sys
input = sys.stdin.readline

n = int(input())
arr = [int(input()) for _ in range(n)]
arr.sort()

cnt = [0]*(n+1) # 1부터

for i in arr:
    cnt[i] += 1

print(cnt.index(max(cnt)))



솔루션 코드 - 내가 푼 - 정답

  • 근데, Counter하기 전에 sort()를 해줘야지만 정답인데
    • 왜??????? Counter는 개수 찾는건데 대채 외않되?? sort()안하면 틀렸다고 뜸
    • 심지어 시간초과 틀렸습니다도 아니고 그냥 틀렸습니다임
from collections import Counter
import sys
input = sys.stdin.readline

n = int(input())
arr = [int(input()) for _ in range(n)]
arr.sort()
sorted_num = Counter(arr)
a = sorted_num.most_common(1)
print(a[0][0])



솔루션 코드 - 호석 정답

  • 정렬문제이므로 한 번은 sort()를 수행해줘야함
  • 정렬한 다음에 똑같은 값이 등장할 때마다 cnt++ 하고 그값을 max로 / 다른 값 등장하면 cnt 1로 돌아가 (정렬되어있기 때문)
# 호석 정답
import sys
input = sys.stdin.readline
n = int(input())
a = [int(input()) for _ in range(n)]

a.sort()

maximum = a[0]
maxCnt = 1        # 현재 max값을 저장 (a[0] 1번 등장 ~>초기화)
curCnt = 1        # 두 번째 값부터 등장 횟수 카운팅용

# 미리 정렬해놓고 두 번째 데이터부터 counting 시작 (-->정렬문제!!)
for i in range(1, n):    
    if a[i] == a[i-1]:
        curCnt += 1         # 같은 경우 ++
    else:
        curCnt = 1          # 값이 바뀌면 카운팅 1부터
        
    # max 체크
    if maxCnt < curCnt:
        maxCnt = curCnt;    # max값의 카운팅값
        maximum = a[i]      # max값 저장

print(maximum)

profile
Do My Best

0개의 댓글