Algorithm/프로그래머스

세무민의 알고가자 : 프로그래머스 카펫 문제 풀기

세기루민 2021. 2. 25. 14:20
728x90

오늘 풀어볼 문제는 카펫!

생각해보면 쉬웠으나 삽질을 조금 해버림...ㅎ


문제 설명


제한사항 및 입출력 예시


풀이

이 문제는 우선 문제를 이해하는 것이 중요하다.

결국에는 노란색 카펫이 갈색 카펫보다 작아야 한다는 것을 인지해야 한다.

예를 들어서 Brown, Yellow = 24, 24의 예시를 들어보면 

아래의 그림처럼 그릴 수 있다. 

여기서 중요한 건 노란색의 테이블을 갈색 테이블이 포함해야 한다는점!

여기서 확인할 수 있는것은 아래와 같다!

결국 Yellow는 (x-2)(Y-2)의 값을 일치하는 경우의 수를 찾아야 한다.

반복문을 이용하더라도 위와 같은 경우의 수를 인지하지 못한다면 1~2개 정도의 테스트 케이스를 통과하지 못한다.

그 이유는! Yellow를 포함하지 않는 값을 출력하기 때문!

이번 문제에서 기억해야할 것을 나열해보면!

1. 노란색 카펫 < 갈색 카펫

2. Yellow = (x-2)(y-2) -> True


코드

import math
def solution(brown, yellow):
        sumColor = brown + yellow
        result = []
        for i in range(2, sumColor):
            if sumColor % i == 0:
                result.append(i)

        endPoint = -1
        answer = []
        for i in range(len(result)):
            if (result[i] - 2) * (result[endPoint] - 2) == yellow:
                answer.append([result[endPoint], result[i]])
                break
            else:
                endPoint = endPoint - 1
                
        return answer[0]

위와 같이 풀었습니다.

먼저 brown과 yellow를 더한 값의 약수를 찾아준 뒤

endpoint를 지정해서 하나씩 확인해주면 됩니다.

endpoint를 -1을 한 이유는 다들 아시겠죠?

만약 arr = [1,2,3,4,6,12] 라고 가정해보겠습니다.

[arr[0],arr[-1]] -> [1, 12]

[arr[1],arr[-2]] -> [2, 6]

[arr[2],arr[-3]] -> [3, 4]

위의 경우의 수처럼 이용하기 위해 endPoint를 설정해줍니다.

그 후 Yellow = (x-2)(y-2)가 일치한다면 answer에 추가해주면 끝!

이번 문제도 클리어!


다음에도 도움될 만한 포스팅으로 찾아오겠습니다!

728x90