먼저 테두리 1줄만 브라운 색 카펫이므로, 노란색 카펫의 가로 길이의 두배(위아래) 세로 길이의 두배(양옆)에 4를 더해야한다. 여기서 4란 4곳의 꼭짓점 부분이다 !!
그렇기 때문에 (yellow_x)2 + (yellow_y)2 + 4 는 갈색 격자의 수이다 !
먼저 나의 첫 풀이를 보자 !
def solution(brown, yellow):
yellow_x=0
yellow_y=0
for i in range(1,yellow+1):
for j in range(1,i+1):
if ((i)*2+(j)*2+4==brown) & (i*j==yellow) :
yellow_x=i
yellow_y=j
break
a=[yellow_x+2,yellow_y+2]
return a
코드는 맞는 것 같은데, 시간 초과로 몇개의 테스트에서 오류가 났다 그래서 나는
for i in range(1,yellow+1):
for j in range(1,i+1):
이 부분을 좀 더 간편화해야함을 느꼈다 !
그래서 짠 코드가 ~
수정한 두번째 코드
def solution(brown, yellow):
results=[]
for i in range(1,yellow+1):
if yellow%i==0:
yellow_x=i
yellow_y=yellow//i
if ((yellow_x)*2+(yellow_y)*2+4==brown) & (yellow_x >=yellow_y):
results.append(yellow_x+2)
results.append(yellow_y+2)
return results
바로 이 코드이다 ~
일단 코드 설명을 해보자면 노란색 격자의 수는 1부터 이므로 i를 1부터 yellow까지로 설정해둔다. 여기서는 i는 가로의 길이이다 ! i로 yellow를 나누었을 때 나머지가 0이 되는 몫은 세로의 길이의 후보가 된다. 하지만 이제 조건을 만족하는 세로와 가로의 길이를 구해야한다~
그래서 일단 i로 yellow를 나누었을 때, 나머지가 0이 되는 값들을 나란히 가로와 세로의 길이로 둔다. 이후에 우리가 앞서 구했던 공식인
(yellow_x)2 + (yellow_y)2 + 4 =brown을 만족하고 가로의 길이가 세로의 길이보다 같거나 큰 경우에 results에 저장해준다~~
이러면 끝 !! 이 문제는 '(yellow_x)2 + (yellow_y)2 + 4 =brown' 이 공식이 너무나도 중요했던 것 같다 ㅎㅎ