사과장수는 최대 이익을 계산해야함
사과 1상자에 m개의 사과를 넣었을 때, 최저 점수가 1보다 크거나 같아야하고 k보다 같거나 작아야함
이익 = 상자에 담은 사과들 중 가장 낮은 점수 * m * 상자개수
k : 사과의 최대 점수
m : 한 상자에 들어가는 사과의 개수
즉, 상자 개수는 정해져 있고 거기에 모든 사과 개수를 넣으면 된다.
주어진 score에서 m개의 사과를 한 상자에 담았을 때, 가장 이익이 많이 나는 경우의 수를 구하여라
def solution(k, m, score) :
# 사과담을 상자 생성
apple_box = []
# 사과점수 리스트를 순회하면서
for i in score :
# 사과의 점수가 1이면 패스
if i==1 :
pass
# 아니면 사과상자에 추가
else :
apple_box.append(i)
# 최저 사과점수 * m * 상자안에 들어간 사과 개수와 m을 나눈 값
return min(apple_box) * m * len(apple_box)/m
def solution(k, m, score) :
# 상자 개수
box = int(len(score)/m)
# 최대이익을 위해 score 정렬
score.sort(reverse=True)
# 반환할 answer 초기화
answer = 0
n = m
# 사과를 담을 상자 생성
apple_box = []
# box개수 만큼 순회하면서
for i in range(box) :
# 사과상자에 사과를 m개씩 슬라이싱 해서 담기
apple_box.append(score[i*3:n])
# 사과를 m개 담았으면 인덱스 위치도 이동
n += m
# 사과상자가 2차원으로 반환되어 min을 한 번 더 감싸주고 최저 점수와 m을 곱하기
answer += min(min(apple_box)) * m
return answer
처음에 통과 했을 때 너무나 기뻤다.. 하지만...
잘못된 부분
1. apple_box.append(score[i*3:n])
i*3이 아니라 i*m이 되어야 함
2. min(min(apple_box)) * m
min(apple_box)가 잘못됨, apple_box는 여러 상자를 담고 있는 리스트가 되는데,
여기서는 가장 작은 값 하나만을 찾고 있음
3. 복잡성 및 불필요한 리스트 생성
apple_box 리스트를 추가적으로 생성하는 것은 불필요함
문제 해결 접근 방식
1. 사과 점수 내림차순 정렬
2. 상자 구성 ( 정렬된 score에서 앞부터 순차적으로 m개씩 상자를 구성)
3. 이익 계산 ( 각 상자 가격을 계산 : 가장낮은점수 * 상자에담긴 사과개수)
4. 반환
def solution(k, m, score):
# 사과 점수를 내림차순으로 정렬
score.sort(reverse=True)
# 최대 이익을 계산할 변수
max_profit = 0
# 사과 점수를 m개씩 묶어서 상자를 구성
for i in range(0, len(score) - m + 1, m):
# 상자에서 가장 낮은 점수
min_score_in_box = score[i + m - 1]
# 상자의 이익
max_profit += min_score_in_box * m
return max_profit
요즘 바쁘다는 핑계로 코테연습을 많이 못했다.
그래서 그런지 머리가 그새 굳은것(?) 같기도 했다.
근데 코테연습을 못 하면서도 계속 하고싶다는 생각이 들었고,
정답이 맞고 틀리고를 떠나서 문제를 풀었을 때 그 희열, 감정이 계속 생각났다.
그래서 오늘도 엄청 피곤하지만 한 문제라도 풀려고 책상앞에 앉았다.
물론 뇌가 피곤해서 머리가 잘 안 돌아갔지만 ㅎ..
그래서 그런가 조그만한 실수가 있었는데도 눈치를 채지 못했다ㅠㅠ
결국 이번에도 마지막에는 GPT의 힘을 빌리고 말았다ㅠㅠㅠ
처음보다는 많이 나아지는 것 같으면서도.. 제자리를 걷는 것 같은 기분..?
어쨌든 예전에는 코테문제 연습하려고 하면 두려움이 먼저 앞섰고, 내가 풀지 못할것이라고 단정짓고 풀었는데,
조금, 아주 조금 자신감을 얻은 것 같다.
앞으로 매일매일 한다고 보장은 못하겠지만.. 자격증 시험 보고 난 뒤에는 매일매일 하도록 노력하겠다.