def solution(brown, yellow):
answer = []
yellow_divied = [[i, yellow//i] for i in range(1, yellow+1) if yellow % i == 0]
for i in yellow_divied :
temp = i[0] * 2 + i[1] * 2 + 4
if temp == brown : answer = [i[0] + 2, i[1] + 2]
return answer
문제정리
카펫은 중앙에 노란색으로 칠해져 있고 테두리에 1줄은 갈색으로 칠해져있는 격자 모양이었는데 Leo는 노란색의 갯수와 갈색의 갯수만 알고있는 상황일때 카펫의 크기를 구하여 return하시오
풀이과정
간단하게 중앙의 노란색의 경우에 수를 다 구한 후 노란색에 가로, 세로를 바탕으로 1줄인 갈색의 갯수를 구한 후 Leo가 기억하는 갈색갯수와 비교한후 같으면 해당값이 정답이다고 생각하고 풀이하였다.
리스트 컴프리헨션으로 노란색의 약수를 구했는데 시간복잡도는 더 짧게 구현할 수 있게지만 코드는 정말 깔끔했다.
노란색 약수를 바탕으로 가로, 새로길이에 모서리 4칸을 더하면 갈색의 갯수가 되었기 때문에 해당 방식을 코드에 녹여냈다.
풀이 후
풀면서 약수를 구하면서 전체 순환하고, 약수 구한 것을 또 순환하며 비효율적이지 않을까 생각했다.
다행이 테스트에서 걸리지 않았을 뿐더러 생각보다 속도가 빨라서 놀랐다.
먼가 두번 순환하며 비효율적으로 느꼈지만 2O(n)이기 때문에 n^2이 아니여서 빨랐던거갔다.
다른사람 풀이를 보니 나만 그렇게 생각했던 것은 아니였던 것을 알았다. 나는 약수 구하고, 약수 구한 것을 순환하였지만 깔끔하게 짜신 분은 약수 구하면서 갈색 타일 갯수체크까지 함으로 두번순환이 아닌 한번 순환으로 끝냈다. 괜찮다는 생각이 들었다.