반응형
문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]
import math
def solution(brown, yellow):
total = brown + yellow
for i in range(1, int(math.sqrt(total)) + 1):
if total % i == 0:
if (total // i - 2) * (i - 2) >= yellow:
return [total // i, i]
갈색 격자의 가로, 세로 길이가 될 수 있는 후보들을 먼저 생각했다. 예를 들어, 12면 (1, 12), (2, 6), (3, 4)와 같다. 그 뒤에는 반복되므로 제곱근을 통해 range를 정했다.
노란색 격자의 후보는 위의 후보에 있는 가로, 세로 길이에서 각각 2를 빼주었고, 이때 크기가 노란색 격자보다 크다면 정답이라고 판단했다.
# 모범 참고 코드
def solution(brown, yellow):
for i in range(1, int(yellow**(1/2))+1):
if yellow % i == 0:
if 2*(i + yellow//i) == brown-4:
return [yellow//i+2, i+2]
참고 코드랑 내가 푼 버전이랑 구체적인 방법에서 차이가 있지만, 전반적인 로직은 동일하다. 노란색 격자의 둘레를 이용하여, 갈색 격자가 노란색 격자를 포함하는 것이라면 답으로 출력하는 것이다. 갈색 격자는 안쪽 둘레를 이용한다.
728x90
반응형
'문돌이 존버 > 프로그래밍 스터디' 카테고리의 다른 글
HTTP 메서드 활용 및 API 설계 예시 (0) | 2021.05.19 |
---|---|
(프로그래머스 해시 문제 풀이) 베스트앨범 (0) | 2021.05.18 |
HTTP 기본 개념 특성 다지기 (0) | 2021.05.16 |
인터넷 네트워크 및 URL 개념 간단 정리 (0) | 2021.05.16 |
(프로그래머스 스택/큐 문제 풀이) 프린터 (0) | 2021.05.15 |