99클럽 코테 스터디 13일차 TIL [최소직사각형]

여지은·2024년 8월 6일
0

Python Cording Test

목록 보기
13/14
post-thumbnail

참고 : 12일차는 10일차와 문제가 비슷하므로 (문자열 내림차순으로 배치하기) 제외하였읍니다.

✏️ 문제

문제를 이해하기 위해 정리한 것.. 나만 알아볼듯
sizes[w,h]
size = max(w)*max(h)
but if w<h then w=h, h=w  and size2 = max(w)*max*(h)
answer = min(size,size2)
return answer

🧩 풀이

- 나의 풀이

문제를 이해한 순서대로 거의 직관적으로 코드를 작성했다.
런타임에러가 나는 것을 예상은 하긴 했다만....ㅠ
import numpy as np


def solution(sizes):
    
    # 크기순으로 정렬
    sizes.sort()
    
    # numpy array로 변경(슬라이스 쉽게 하기 위해)
    sizes = np.array(sizes)
    
    # 슬라이스 해서 w,h 큰 값 찾고 w*h 계산
    w_max = max(sizes[0:1,0],sizes[1:2,0],sizes[2:3,0],sizes[3:4,0])
    h_max = max(sizes[0:1,1],sizes[1:2,1],sizes[2:3,1],sizes[3:4,1])
    size = w_max * h_max
    
    # 빈 2차원배열 선언 후 초기화
    asize = np.full((4,2),0)
    
    # 순회하면서
    for i in range(0,4) :
        
        # 만약 w < h 라면 새로만든 배열에 w와 h를 바꿔서 추가하고
        if sizes[i:i+1,0] < sizes[i:i+1,1] :
            asize[i:i+1,0] = sizes[i:i+1,1]
            asize[i:i+1,1] = sizes[i:i+1,0]
        
        # 아니면 그대로 추가 
        else :
            asize[i:i+1,0] = sizes[i:i+1,0]
            asize[i:i+1,1] = sizes[i:i+1,1]
    
    # 새로만든 배열에서 w,h 큰 값 찾아서 w*h 계산
    w_max2 = max(asize[0:1,0],asize[1:2,0],asize[2:3,0],asize[3:4,0])
    h_max2 = max(asize[0:1,1],asize[1:2,1],asize[2:3,1],asize[3:4,1])
    size2 = w_max2 * h_max2
    
    # 제일 작은 w*h 반환 
    return int(min(size,size2))

- GPT 도움

def solution(sizes):
    # 각 명함의 가로와 세로 중 더 큰 값을 가로로, 더 작은 값을 세로로 설정
    rotated_sizes = [(max(w, h), min(w, h)) for w, h in sizes]
    
    # 가로 길이 중 최대값과 세로 길이 중 최대값을 구함
    max_width = max(size[0] for size in rotated_sizes)
    max_height = max(size[1] for size in rotated_sizes)
    
    # 지갑의 최소 크기를 계산
    wallet_size = max_width * max_height
    
    return wallet_size

❗️ 결과

- 나의 풀이 결과

오답 이유 : 주어지는 배열이 4*2로만 주어지는 줄 알고 
w_max 와 h_max를 계산할 때 5*2는 마지막이 누락되게 코드를 작성함 ㅠ
+ 너무나도 복잡한 코드로 런타임 에러 되시구요..

- GPT 결과

너무나 당연하게도 모든 테스트를 통과하고 런타임에러 없이 깔꼼하게 통과하였다.

💡회고

- 잘 했던 점

문제를 이해하려고 손코딩 한 뒤 그대로 차분하게 코드를 작성했던 것
그리고 처음부터 GPT에 의존하기 보다는 2차원 배열을 어떻게 슬라이스 하면 좋을지 시도해봤던 점이 좋았다(?)

뭐..마지막 테스트 오류가 나긴 했지만 그래도 한 번에 에러 없이 코드가 실행된 것은 거의 처음이다.
일단 구현하는 것을 목표로 두고 코드를 작성하고 있는데, 목표에 맞게 점점 더 발전해 나가는 모습이 보인다.
그리고 이제는 어려운 문제를 보아도 두려움 보다는 어떻게 코드를 짜야하는지, 
내가 어떻게 구현할 수 있고 결과가 어떻게 나올지 너무 기대가 되고 재밌어졌다.

- 고쳐야 할 점

일단 구현을 하고 나면 진이 다 빠져버려서(?) 코드를 수정하기 힘들어진다ㅠㅠ
구현이 되었으면 조금 더 간결하게 수정하는 연습을 해야겠다.
특히 리스트 컴프리헨션!!!!!! 진짜 유용한데 진짜 안 쓰는 것 중 하나......
근데 일단 내 주제에 편히 가려고 하는 것 보다는... 조금 더 익숙해지면 하는 걸루..ㅎ
아, 그리고 오늘 테스트 통과하지 못한 것을 수정하지 못 했는데 (운동 후 너무 피곤해서)
다음에는 테스트 통과할 때까지 포기하지 않기로 하자
profile
항상 why?를 고민하는 사람

0개의 댓글