Python/Coding Test

[Coding Test] 카펫(완전탐색)

gangee 2023. 7. 17. 18:15

목차

    728x90
    반응형

    프로그래머스 코딩테스트 2단계 : 카펫(완전탐색)

    문제 설명

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

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

    Leo는 집으로 돌아와서 아까 본 카펫의 노란색과 갈색으로 색칠된 격자의 개수는 기억했지만, 전체 카펫의 크기는 기억하지 못했습니다.

    Leo가 본 카펫에서 갈색 격자의 수 brown, 노란색 격자의 수 yellow가 매개변수로 주어질 때 카펫의 가로, 세로 크기를 순서대로 배열에 담아 return 하도록 solution 함수를 작성해주세요.

    문제 풀이

    처음 문제 풀이

    • yellow의 약수를 구해 a 생성
    • 약수의 중앙값을 뽑고 순서를 바꾸어 median에 추가
    • yellow가 1일 경우는 약수의 중앙앖을 구할 수 없기 때문에 yellow 값 그대로 median에 추가
    • 원인 : median 리스트의 요소의 곱이 yellow가 맞는지 확인하지 않음, yellow의 가로 세로의 합이 brown값인지 확인하지 않음

      수정한 풀이

    • 위 방식과 비슷하게 하고 가로, 세로 값의 곱이 yellow가 아닐 경우를 없애기 위해 반복문을 통해 짝지어지는 약수 값이 나올 수 있게 설정
    • 조건문에서 가로, 세로의 합이 (brown-4) 나누기 2의 값이 맞는지 확인

    정답 코드

    def solution(brown, yellow):
        answer = []
        a = [] # yellow 약수 담을 리스트
    
        for i in range(1, yellow+1): # 약수 구하기
            if yellow % i == 0:
                a.append(i)
    
        for j in a:
            b = yellow//j # 짝지어지는 약수의 다른 값
    
            w, h = max(j,b), min(j, b)
            if w * h == yellow and w + h == (brown-4)//2:
                answer.append(w+2)
                answer.append(h+2)
                break
    
        return answer
    * 이 문제는 프로그래머스 코딩테스트 연습 2단계 문제입니다.
    728x90
    반응형