프로그래머스 카펫
일단 red, brown으로 만들어지는 모양은 십자가같은 건 아니고 직사각형이다.
가로, 세로 길이가 다양하게 나올 수 있는데 주어진 red, brown의 타일 수로 red 직사각형을 만들고 brown으로 그 테두리를 감쌀 수 있으면 되는 것이다.
red의 개수로 직사각형을 그리다보면 red를 만들 수 있는 공약수로 짝을 지어서 그릴 수 밖에 없다.
red가 9면 1 x 9, 3 x 3
27이면 1 x 27, 3 x 9
24면 1 x 24, 2 x 12, 3 x 8, 4 x 6
이런 식이다.
가로의 길이는 세로보다 같거나 크다.
red로 만들 수 있는 다양한 직사각형의 테두리에 brown의 개수를 다 써서 채우는 걸 찾으면 된다.
red의 공약수 짝으로부터 테두리에 쓰인 타일 수를 구하는 식은
red의 가로 x 2 + (red의 세로 + 2) x 2이다.
red로 만들어진 짝을 가지고 테두리 수를 하나하나 구해서 주어진 brown과 일치하는 지 판단하면 된다.
일치한다면 [red의 가로 + 2, red의 세로 + 2]를 반환하면 된다.
def get_cd(red):
cds = []
cd_dict = {}
for i in range(1, red+1):
if red % i == 0:
cds.append(i)
cds_len = len(cds)
for j in range(cds_len//2):
cd_dict[cds[cds_len - j - 1]] = cds[j]
if cds_len % 2 == 1:
cd_dict[cds[cds_len//2]] = cds[cds_len//2]
return cd_dict
def solution(brown, red):
cd_dict = get_cd(red)
for x, y in cd_dict.items():
if brown == x * 2 + (y + 2) * 2:
return [x + 2, y + 2]
테스트 케이스
print(solution(10, 2))
print(solution(8, 1))
print(solution(54, 24))
print(solution(24, 24))
print(solution(16, 9))
출처 https://programmers.co.kr/learn/courses/30/lessons/42842?language=python3
코딩테스트 연습 - 카펫 | 프로그래머스
Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 빨간색으로 칠해져 있고 모서리는 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 빨간색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다. Leo가 본 카펫에서 갈색 격자의 수 brown, 빨간색 격자의 수 red가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수
programmers.co.kr