오늘 풀어볼 문제는 카펫!
생각해보면 쉬웠으나 삽질을 조금 해버림...ㅎ
문제 설명
제한사항 및 입출력 예시
풀이
이 문제는 우선 문제를 이해하는 것이 중요하다.
결국에는 노란색 카펫이 갈색 카펫보다 작아야 한다는 것을 인지해야 한다.
예를 들어서 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에 추가해주면 끝!
이번 문제도 클리어!
다음에도 도움될 만한 포스팅으로 찾아오겠습니다!
'Algorithm > 프로그래머스' 카테고리의 다른 글
세무민의 알고가자 : 프로그래머스 이상한 문자 만들기 문제 풀기 (2) | 2021.02.27 |
---|---|
세무민의 알고가자 : 프로그래머스 폰켓몬 문제 풀기 (2) | 2021.02.26 |
세무민의 알고가자 : 프로그래머스 구명보트 문제 풀기 (0) | 2021.02.24 |
세무민의 알고가자 : 프로그래머스 소수 찾기 문제 풀기 (4) | 2021.02.23 |
세무민의 알고가자 : [프로그래머스] 전화번호 목록 문제 풀기 (5) | 2021.02.22 |