728x90
반응형
programmers.co.kr/learn/courses/30/lessons/42842
1. 문제 설명
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다.
Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.
Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.
제한사항
- 갈색 격자의 수 brown은 8 이상 5,000 이하인 자연수입니다.
- 노란색 격자의 수 yellow는 1 이상 2,000,000 이하인 자연수입니다.
- 카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 깁니다.
입출력 예
brownyellowreturn
10 | 2 | [4, 3] |
8 | 1 | [3, 3] |
24 | 24 | [8, 6] |
2. 풀이
핵심 제약 조건 :
1) brown 은 무조건 테두리 1줄
이는 즉 brown 의 가로는 yellow 가로 +2
brown 의 세로는 yellow 세로 +2
2) 카펫은 반드시 가세로 길이가 같거나 가로가 더 커야함
따라서 yellow 배수를 순차적으로 살펴볼 때
배수 중 더 큰 값이 가로가 되게끔 만들었음
가령 yellow 가 15면 가로 5, 세로 3 으로 되도록 **
==> 코드에서는 절반만 탐색을 하게 했고, 더 큰 값이 튜플의 앞에 들어가도록 했음
def solution(brown, yellow):
pair = []
if yellow == 1:
return [3,3]
else:
for div in range(1, (yellow//2)+1):
if yellow % div == 0:
if (div, int(yellow /div)) in pair :
return 0
# 검사
y_rownum, y_colnum = int(yellow /div), div
t_row, t_col = y_rownum + 2, y_colnum + 2
if t_row * t_col == brown + yellow:
return [t_row, t_col]
else:
pair.append((int(yellow /div), div))
728x90
반응형
'Study > Algorithm & Data structure' 카테고리의 다른 글
[프로그래머스] [완전탐색] 모의고사 (201103) (0) | 2020.11.05 |
---|---|
[프로그래머스][stack/queue] 탑 python (201104) (0) | 2020.11.05 |
[프로그래머스] 완전탐색 소수찾기 - 201102 (0) | 2020.11.03 |
[백준] (dp) 숨바꼭질 201101 (0) | 2020.11.03 |
[백준] (bfs) 숨바꼭질 201031 (0) | 2020.10.31 |
댓글