99클럽 코테 스터디 14일차 TIL [과일 장수]

여지은·2024년 8월 12일
0

Python Cording Test

목록 보기
14/14
post-thumbnail
post-custom-banner

✏️ 문제

- 내가 처음에 이해한 문제

사과장수는 최대 이익을 계산해야함
사과 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번만)을 고친 후

GPT 풀이

문제 해결 접근 방식
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의 힘을 빌리고 말았다ㅠㅠㅠ

처음보다는 많이 나아지는 것 같으면서도.. 제자리를 걷는 것 같은 기분..?
어쨌든 예전에는 코테문제 연습하려고 하면 두려움이 먼저 앞섰고, 내가 풀지 못할것이라고 단정짓고 풀었는데,
조금, 아주 조금 자신감을 얻은 것 같다.
앞으로 매일매일 한다고 보장은 못하겠지만.. 자격증 시험 보고 난 뒤에는 매일매일 하도록 노력하겠다.
profile
항상 why?를 고민하는 사람
post-custom-banner

0개의 댓글