명예의 전당 (1)
풀이
머리가 꼬인 상태여서 어떻게 풀어야지 하다가, 몇 번 틀리고 맞췄다.
sorted()를 이용해 줬다.
더 좋은 방법이 있을 것이라 생각했는데, 다른 살마 풀이를 보니 좋은 풀이가 있었다.
우선 명예의 전당이 안 찼을 때, 찼을 때로 나눠주고, 찼을 때도, min(honor)의 값이 score [i]보다 작을 때, 클 때를 구분해 주었다.
그렇게 정리한 코드가 아래 코드이다.
# k번째 순위의 가수 점수보다 더 높으면 출연 가수의 점수가 명예의 전당에 오르고, k번째 순위의 점수는 내려옴.
# 매일 '명예의 전당' 최하위 점수를 발표. k = 3,
def solution(k, score):
# 1일차 발표와 스코어 입력
honor = [score[0]]
announce = [score[0]]
# 2일차부터 반복문
for i in range(1, len(score)):
# 명예의 전당 확인
# 명예의 전당이 꽉 안찼을 때
if len(honor) < k:
honor.append(score[i])
honor = sorted(honor, reverse=True)
announce.append(honor[-1])
continue
# 명예의 전당이 꽉 차고, min(honor) < score[i]일때
elif len(honor)>= k and min(honor) < score[i]:
honor.append(score[i])
honor = sorted(honor, reverse=True)
honor.pop(-1)
announce.append(honor[-1])
else:
announce.append(honor[-1])
return announce
다른 사람 풀이
announce에 들어가는 것은 명예의 전당에 들어간 것 중 가장 작은 값을 넣으면 되고, 이때 우리가 원하는 것은 announce이기 때문에, honor를 정렬할 필요는 없음을 인지하고 푼 코드이다.
1. 우선 q를 명예의 전당으로 이용을 한다.
2. 만약 K보다 많은 수가 들어있으면 가장 작은 값을 제외시킨다. remove()를 사용하였음.
3. 남은 q에서 가장 작은 값을 answer에 입력시킨다.
4. 값을 반환한다.
def solution(k, score):
q = []
answer = []
for s in score:
q.append(s)
if (len(q) > k):
q.remove(min(q))
answer.append(min(q))
return answer
'알고리즘 > 프로그래머스' 카테고리의 다른 글
프로그래머스 Lv1 콜라 문제 (python) (0) | 2024.02.03 |
---|---|
프로그래머스 Lv1 달리기 경주 (python) (0) | 2024.02.02 |
프로그래머스 Lv1 바탕화면 정리 (python) (0) | 2024.02.02 |
프로그래머스 Lv1 조건에 맞는 회원수 구하기 (MySQL) (1) | 2024.02.02 |
프로그래머스 Lv1 상위 n개 레코드 (MySQL) (0) | 2024.02.02 |