프로그래머스 연습문제 - 카펫 (level2)

j_wisdom_h·2022년 11월 21일
0

CodingTest

목록 보기
14/58
post-thumbnail

프로그래머스 연습문제 - 카펫 (level2)

문제설명


제한사항 & 입출력 예


My Solution

def solution(brown, yellow):
    total = brown + yellow 
    for w in range(1,total+1):
        h = total//w
        if total % w == 0 and w >= h and (w-2)*(h-2) == yellow:
            return [w,h]
#위 코드를 2줄로 쓴다면 ( list comprehension )
#하지만 효율성은 위 코드가 더 좋다.
def solution(brown, yellow):
    total = brown + yellow 
    return  [[w,total//w] for w in range(1,total+1) if total % w ==0 and w >= total/w and (w-2)*(total//w - 2) == yellow][0]
    
    

와 오늘은 문제해석을 잘못해서 엄청 해맸다.


처음에는 아무생각없이 테스트케이스만 보고 둘을 더한값을 곱으로 표현했을때 가장 적은 격차가 있는 [w,h]을 반환했다.
예를 들어,
brown : 10, yellow: 2 라면 이 둘의 합은 12이다.
width와 height를 곱해서 12가 되는 수 중 서로 차이가 가장 작은 것은 [4,3] (w>=h 이므로) 이라고 구했다.
지금 생각하면 어이가 없다 하하하.

def solution(brown, yellow):
    answer = []
    total = brown + yellow 
    for i in range(1,total+1):
        if total % i ==0 and i >= total/i :
            answer= [i,int(total/i)]  
            return answer

테스트케이스 4,6,7이 틀리지 않았더라면 머리를 써 볼 생각도 안했을 것 같다.
왜 틀렸을까 고민을 하다가 질문하기에 들어갔다.

TC 4,6,7을 통과하려면 (x-2)(y-2)==yellow를 검증해야합니다.
(18,6) 이 주어진 값일 때, solution=[8,3]이 나와야합니다.
B B B B B B B B
B Y Y Y Y Y Y B
B B B B B B B B

?? (x-2)(y-2)==yellow ??

그렇다... 한 겹만 둘러싸인 것만 해당하는 것이였다.
나는 아래와 같은 경우도 고려하고 있었기때문에 왜 이게 성립한다는 거지? 라는 의문을 가졌었던 것..!!

B B B B B B
B B Y Y B B
B B Y Y B B
B B B B B B
brown : 20, yellow: 4
width: 6, height: 4
(width-2) * (height-2)= 8 != yellow

profile
뚜잇뚜잇 FE개발자

0개의 댓글