문제 링크
https://school.programmers.co.kr/learn/courses/30/lessons/42842
문제 설명
Leo는 중앙에는 노란색으로 칠해져 있고, 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로로 크기를 순서대로 배열에 담아 return 하도록 함수를 작성
제한 사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
풀이
문제에서 테두리 1줄이 갈색으로 칠해져 있기 때문에, 노란색으로 칠해진 사각형은 울퉁불퉁한 사각형이 아닌 직사각형 즉, yellow의 약수로 가로, 세로가 이루어져야 한다.
그림에서 파란색으로 칠해진 사각형과, 빨간색으로 칠해진 사각형을 기준으로 brown 수의 공식을 찾아보면,
(a + 2) * 2 + b * 2 = brown (a >= b) 를 찾을 수 있고,
전체 가로 세로 길이는 a + 2, b + 2 가 된다.
✅ Code - 성공
def solution(brown, yellow):
for i in range(1, int(yellow**(1/2)) + 1):
if yellow % i == 0:
width = [i, yellow // i]
if (width[0] + 2) * 2 + (width[1] * 2) == brown:
width.sort(reverse = True)
return [width[0] + 2, width[1] + 2]
'알고리즘 문제 > 프로그래머스_Lv2 도장깨기' 카테고리의 다른 글
[프로그래머스] 타겟 넘버 (Python) (1) | 2024.06.04 |
---|---|
[프로그래머스] 오픈채팅방 (Python) (0) | 2024.06.04 |
[프로그래머스] 소수 찾기 (Python) (1) | 2024.05.16 |
[프로그래머스] H-Index (Python) (0) | 2024.05.13 |
[프로그래머스] 가장 큰 수 (Python) (0) | 2024.05.10 |