알고리즘/프로그래머스

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

딱따구르리 2022. 4. 2. 19:12
728x90
반응형

문제

 

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

 

코딩테스트 연습 - 카펫

Leo는 카펫을 사러 갔다가 아래 그림과 같이 중앙에는 노란색으로 칠해져 있고 테두리 1줄은 갈색으로 칠해져 있는 격자 모양 카펫을 봤습니다. Leo는 집으로 돌아와서 아까 본 카펫의 노란색과

programmers.co.kr


 

해설

 

이 문제는 입출력 예시를 직접 손으로 그려보면 좀 더 쉽게 방법을 찾을 수 있다.

 

위 이미지를 보면 

Y의 가로(빨강B) + Y의 세로(파랑B) + 2(하양B) == B // 2라는 것을 알 수 있다.

 

그렇다면 Y가로 + Y세로 + 2값이 B//2와 같아질 때

카펫의 가로, 세로 크기를 알아낼 수 있다.

 

카펫의 가로, 세로는 각각 Y가로+2, Y세로+2 이므로

위의 식을 i = 1부터 대입해 풀면 끝이다. 

 

 

**아래 코드 if문에서 yellow/i 대신 yellow//i로 바꾸면 틀리는 케이스가 존재하는데,

아직 정확한 이유는 잘 모르겠다.

Y를 i로 나눈 값이 실수가 나오는 경우가 생겨서 그러는 것인지.. 

카펫의 가로 값을 구한 부분에선 Y가 i로 나누어 떨어지는 것이 확실한 부분이기 때문에 몫을 구해도 되는걸까

B를 2로 나눈 부분도 B는 무조건 2의 배수이기 때문에 몫으로 구해도 되는것일까


코드

 

-파이썬

#프로그래머스 42842(카펫)

def solution(brown, yellow):
    answer = []

    for i in range(1, yellow + 1):
        if (yellow/i) + i + 2 == brown//2:
            answer.append((yellow//i) + 2)  #가로
            answer.append(i + 2)  #세로
            return answer

print(solution(18, 6))
728x90
반응형