mimel   6년 전

for문은 입력받을 때, M값(최빈값의 빈도수), m값(최빈값) 구할 때 쓰고 있고 달리 시간 잡아먹을 부분은 a.sort()정도인데,

정답자 파이썬 숏코딩 길이가 182B까지 떨어지는 걸 보면 sort함수 문제는 아닐 것 같고

입력시나 m 계산에서 시간복잡도는 기껏해야 O(n)일텐데

[a.count(x)for x in a]연산이 많이 느린가요?

indioindio   6년 전

d=collections.Counter(a);
M=max(d.values())

로 대체하면 통과합니다.

M=max([a.count(x)for x in set(a)]) 에서 count 함수가 반복적으로 호출돼서 사실은 O(n2)가 되는 것 같네요.

indioindio   6년 전

링크의 세 번째 답변을 보시면 작성하신 방식의 count 와 Counter 클래스의 성능 차이를 확인하실 수 있습니다.

https://stackoverflow.com/ques...

indioindio   6년 전

클래스가 쓰기 싫다! 하면 아래처럼 급조해서 써도 되겠지만 코드이해도나 성능이나 Counter가 나은 것 같네요.

mimel   6년 전

한꺼번에 출력해주는 거 놔두고 하나씩 들여다보는 코드를 작성하고 있었군요... 감사합니다!

mimel   6년 전

해결은 m 구하면서 같이 M 구하는 방식으로 했습니다. 코드 짧게 짜고 싶어서 저렇게 했었는데 이게 더 짧더라구요(...)

댓글을 작성하려면 로그인해야 합니다.