반응형
- 문제
https://school.programmers.co.kr/learn/courses/30/lessons/135808
- 풀이
def solution(k, m, score):
count = 0
while len(score) >= m :
ans = []
for x in range(0, m) :
ans.append(sorted(score).pop())
score.remove(sorted(score).pop())
count += m * min(ans)
return count
while 반복문을 score 배열의 길이가 m보다 크거나 같을 때 까지 돌려준다. (m개씩 끊어야되니까)
새로운 배열 ans 를 선언하고, 반복문을 m 번 돌려주는 for 문을 작성한다.
그리고 score 배열 오름차순으로 정렬하고 pop으로 뽑아버려 뽑은 건 remove 해서 지워버려야 된다.
그래야지 위에 적은 while 문 적용이 가능하다.
그리고 ans에서 가장 작은 수 * m 해준 걸 count 에 더해준다.
반복문 빠져나와서 return count 하면 정답 나온다.
근데 시간초과 뜬다. 인생 역시 뜻대로 되는거 하나도 없네
def solution(k, m, score):
sort_score = reversed(sorted(score))
new_score = []
answer = 0
for x in sort_score:
if x <= k:
new_score.append(x)
for x in range(1, int(len(new_score) / m) + 1):
answer += new_score[(m * x) - 1] * m
return answer
다시했다.
score 내림차순으로 정렬했다. 최대이익 구해야되니까 내림차순하는게 낫겠다.
정렬된 score를 반복문 돌려서 새로운 배열에 담는데 k보다 큰 건 그냥 안 담았다.
생각해보니까 1트에 k는 쓰지도 않았다 ㅎㅎ
new_score 의 (m * x) - 1 번째는 m개씩 끊었을 때 젤 작은 수니까 거기다가 m 곱하고 answer 에 계속 더해주면 답 나온다.
시간초과도 안 뜬다.
def solution(k, m, score):
return sum(sorted(score)[len(score)%m::m])*m
다른 사람 풀이 구경하러 갔더니 이래놨다. 제발 그만 잘해
len(score) % m : : m 은
index len(score) % m 부터 끝까지 m칸 간격으로 ( 역순 )
이런 뜻이래 담에 써먹어야지 화이팅
반응형
'코딩 테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스 - Python/JavaScript] Lv.1 숫자 문자열과 영단어 (0) | 2023.02.07 |
---|---|
[프로그래머스 - Python] Lv.1 다트게임 (0) | 2023.02.07 |
[프로그래머스 - Python/JavaScript/Java] Lv.1 예산 (0) | 2023.02.07 |
[프로그래머스 - Python] Lv.1 신고 결과 받기 (0) | 2023.02.07 |
[프로그래머스 - Python] Lv.1 크레인 인형뽑기 게임 (0) | 2023.02.03 |