-
파이썬 - limit 3 추출문제풀이/PYTHON 2024. 5. 13. 11:47
코딩테스트 연습 - 명예의 전당 (1) | 프로그래머스 스쿨 (programmers.co.kr)
if min(K) < i : T = ' '.join(map(str, K)) #T.replace(min(K), i)
안됨, 할줄모름
문제는 replace 내의 변경되는 대상도, 변경하는 방식도 str이어야 한다는 것.
=>str(T).replace('min(K)', 'i')
if min(K) < i : # for t in K : # temp = str(t).replace('min(K)','i') # T.append(temp) Q = ' '.join(map(str,K)) R = Q.replace(str(min(K)), str(i),1) print(Q) print(min(K)) print(i) print(R)
바꾸고 싶은 대상이 숫자라면 ''로 직접 문자로 만들지말고 ('min(K)' 라는 문자를 찾게 됨)
str()로 묶어 사용할 것.
내 답
def solution(k, score): K=[] T=[] for i in score : if len(K) <=k-1 : K.append(i) T.append(min(K)) continue if i > min(K): K[K.index(min(K))] =i T.append(min(K)) return T
문제점 :
min(K) 를 찾기 위해 매번 전체값을 한번 돌림 (시간 복잡도)
heap 방식
import heapq def solution(k, score): answer = [] heap = [] l = 0 for i in score: if l < k: l += 1 heapq.heappush(heap, i) else: if heap[0] < i: heapq.heappop(heap) heapq.heappush(heap, i) answer.append(heap[0]) return answer
import heapq def solution(k, score): max_heap = [] answer = [] for sc in score: heapq.heappush(max_heap, (-sc, sc)) answer.append(max(heapq.nsmallest(k, max_heap))[1]) return answer
제일 괜찮은것
def solution(k, score): answer = [] temp = [] for i in score: temp.append(i) temp.sort(reverse=True) temp = temp[:k] answer.append(min(temp)) return answer
why?
정렬 slice - 중복값에 대한 위험이 없음
단, 만약 값이 FIFO, LIFO 와 같이 순서를 따진다면 문제가 생길 수 있음.
'문제풀이 > PYTHON' 카테고리의 다른 글
파이썬 - 문자열 내 반복되는 문자 위치 비교 (0) 2024.05.10 문자열 슬라이스 (0) 2024.05.03 파이썬 - 리스트 내 n개 값 추출 (0) 2024.04.26 파이썬 - while (1) 2024.04.26 파이썬 - 행렬 덧셈 (0) 2024.04.22