본문 바로가기
Coding Test Practice

카펫

by Whiimsy 2024. 4. 4.

 

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

💡 생각

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

(노란색 타일 뭉치 가로 + 노란색 타일 뭉치 세로) 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 가로, 세로는 반을 중심으로 한 쪽이 커질 때 한 쪽은 작아지니까 루트 씌워도 상관없는 듯하다
그런데 어차피 정답인 곳에서 리턴되기 때문에.. 큰 의미는 없을 듯

'Coding Test Practice' 카테고리의 다른 글

피보나치 수  (0) 2024.04.08
다음 큰 숫자  (0) 2024.04.08
영어 끝말잇기  (0) 2024.04.04
짝지어 제거하기  (0) 2024.04.04
구명보트  (1) 2024.04.04