[알고리즘] 프로그래머스 - 카펫

June·2021년 3월 2일
0

알고리즘

목록 보기
104/260

프로그래머스 - 카펫

내 풀이

def solution(brown, yellow):
  total = brown + yellow
  for row in range(3, int(total**0.5)+1):
      if total % row == 0:
          col = total // row
          if (row-2)*(col-2) == yellow:
              return [col, row]

print(solution(10, 2), [4,3])
print(solution(8, 1), [3,3])
print(solution(24, 24), [8,6])

yellow와 brown을 더하면 total이 된다. 전체의 모양을 row * column이라 할 때 yellow의 개수는 (row-2)*(column-2)개가 된다. brown이 최대 5000이고 yellow가 최대 2,000,000이라 10,000,000,000개의 모양이 가능할 것 같지만, row가 3부터 시작해서 (yellow의 최소값이 1이니 row는 최소 3부터다) Math.sqrt(total)까지만 하면 어짜피 뒤에는 했던 것 반복이다. 그렇게 되면 가능한 경우의 수가 100,000로 확 줄어버린다.

0개의 댓글