카펫

Whiimsy_dev·2022년 10월 12일
1

programmers

목록 보기
9/13
post-thumbnail

https://school.programmers.co.kr/learn/courses/30/lessons/42842

💡 생각

갈색 타일의 개수는 아래와 같은 패턴을 가진다

(노란색 타일 뭉치 가로 + 노란색 타일 뭉치 세로) x 2 + 4
(brown-4) / 2 = r(노란색 타일 뭉치 가로) + c(세로)

그리고 (가로)x(세로)는 노란색 타일의 개수

r * c = yellow
c = yellow // r 	# c가 자연수

마지막으로 전체 타일의 크기는 (노란색 타일 가로 + 2) x (노란색 타일 세로 + 2)

📖 내 코드

def solution(brown, yellow):
    for r in range(1, yellow+1):
        if yellow % r == 0:
            if (brown-4)/2 == r + yellow//r:
                return  yellow//r+2, r+2

📑 다른 사람의 풀이

def solution(brown, red):
    for i in range(1, int(red**(1/2))+1):
        if red % i == 0:
            if 2*(i + red//i) == brown-4:
                return [red//i+2, i+2]

내 코드와 거의 동일한데 다른 점이 있다면 for문 마지노를 int(red**(1/2))+1 루트 씌운 값을 쓴 것? yellow 가로, 세로는 반을 중심으로 한 쪽이 커질 때 한 쪽은 작아지니까 루트 씌워도 상관없는 듯하다
그런데 어차피 정답인 곳에서 리턴되기 때문에.. 큰 의미는 없을 듯

0개의 댓글