새소식

Problem solving/문제 풀이 - 2023.02.01

[파이썬] 프로그래머스 카펫 풀이

  • -

문제 확인

 

프로그래머스

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

programmers.co.kr

나의 풀이

  • 노란 박스의 가로, 세로 정보에 따라서 갈색 박스의 정보가 결정 된다.
  • 노란 박스의 가로, 세로는 박스 수의 약수이고, 가로는 그 중에서 큰 값이다.
  • 따라서 노란 박스의 약수를 큰 수 부터 역으로 완전 탐색하면 문제를 풀 수 있다.
  • 탐색 범위에 대해선, 가로의 길이가 세로 길이 보다 크거나 같기 때문에 제곱근 범위 까지만 찾으면 된다.

# 노란 박스 정보 : 가로 x 세로
# brown = ((가로 + 2) * 2 + 세로 * 2)
def solution(brown, yellow):
    answer = [0, 0]
    # yellow 박스의 가로 정보 확인
    # 가로 길이는 세로 길이 보다 크거나 같기 때문에, 제곱근 까지만 탐색
    for i in range(yellow, int(yellow ** 0.5) - 1, -1):
        # 약수인 경우
        if yellow % i == 0:
            if brown == ((i + 2) * 2 + ((yellow) // i) * 2):
                answer = [i + 2, (yellow // i) + 2]
                break
    return answer

다른 사람 풀이

  • 갈색 블록의 절반은 (노란 블록의 가로 + 2 + 노란 블록의 세로)와 같다는 것을 활용해서 풀었다.

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

참고

 

프로그래머스

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

programmers.co.kr

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.