이직하고만다(분노)
99클럽 코테 스터디 19일차 TIL + 프로그래머스 그리디
xxo_ohii
2024. 8. 10. 00:41
728x90
- 오늘의 학습 키워드 : 그리디(탐욕)
https://school.programmers.co.kr/learn/courses/30/lessons/135808?language=python3
- 공부한 내용 본인의 언어로 정리하기
def solution(k, m, score):
answer = 0
#사과 낮은 점수는 p , k는 사과의 점수 , 사과 한상자의 가격은 p*m 남는 사과는 버림
score_sort = sorted(score, reverse=True)
for i in range(0, len(score_sort), m): #갯수의 숫자
box = score_sort[i:i+m]
if len(box) == m:
answer += min(box)*m
return answer
- 오늘의 회고
- 어떤 문제가 있었고, 나는 어떤 시도를 했는지
처음에는 그냥 박스 1, 2,3,,,등 스코어의 갯수에서 한 상자에 담을 수 있는 갯수만큼 생성한다음 하나씩 append해서 담고 각 박스별로 제일 작은 거를 추출해서 곱하기를 할려고했는데 너무 비효율적이라는 것을 깨달았다.
- 어떻게 해결했는지
그래서 찾아본 끝에 파이썬 리스트 슬라이싱이라는 것을 알게 되었고.
리스트 슬라이싱이란
: 리스트 특정부분을 잘라내는 것을 의미하고, 이는 튜플, 문자열, 리스트 등에서도 사용가능하다고 배웠다.
슬라이싱의 기본문법은
list[start:stop:step] 이런식으로 쓰면된다. 아래 설명을 추가적으로 확인하면 될 듯
- start: 슬라이싱을 시작할 인덱스입니다. 이 인덱스부터 슬라이싱이 시작됩니다. 이 값이 생략되면 기본값으로 0이 사용됩니다.
- stop: 슬라이싱을 종료할 인덱스입니다. 이 인덱스 전까지의 요소가 포함됩니다. 이 값이 생략되면 리스트의 끝까지 슬라이싱됩니다.
- step: 슬라이싱 간격을 의미합니다. 기본값은 1입니다. 이 값이 생략되면 한 칸씩 슬라이싱됩니다.
# 예제 리스트
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 1. 기본 슬라이싱
print(numbers[2:5]) # 출력: [2, 3, 4]
# 인덱스 2부터 4까지의 요소를 슬라이싱합니다.
# 2. 시작 인덱스를 생략
print(numbers[:3]) # 출력: [0, 1, 2]
# 처음부터 인덱스 3 전까지 슬라이싱합니다.
# 3. 끝 인덱스를 생략
print(numbers[4:]) # 출력: [4, 5, 6, 7, 8, 9]
# 인덱스 4부터 끝까지 슬라이싱합니다.
# 4. 양쪽을 생략
print(numbers[:]) # 출력: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# 리스트 전체를 슬라이싱합니다.
# 5. 스텝(간격) 사용
print(numbers[::2]) # 출력: [0, 2, 4, 6, 8]
# 처음부터 끝까지 2칸씩 건너뛰며 슬라이싱합니다.
# 6. 역순 슬라이싱
print(numbers[::-1]) # 출력: [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
# 리스트를 뒤집어서 반환합니다.
그리고 다시 코드를 보면
def solution(k, m, score):
answer = 0
#사과 낮은 점수는 p , k는 사과의 점수 , 사과 한상자의 가격은 p*m 남는 사과는 버림
score_sort = sorted(score, reverse=True) # 역순으로 점수를 정렬함
for i in range(0, len(score_sort), m): #갯수의 숫자
box = score_sort[i:i+m] #슬라이싱을 통해 박스를 나눈다.
if len(box) == m: # 갯수가 일치하면
answer += min(box)*m #박스 중 제일 작은 점수를 갯수만큰 곱해서 answer에 누적시키면됨
return answer
후
728x90