[Python] 프로그래머스 lv2 - 카펫

2023. 5. 18. 09:50알고리즘/문제풀이

[Python] 프로그래머스 lv2 - 카펫

 

코딩테스트 연습 - 카펫 | 프로그래머스 스쿨 (programmers.co.kr)

 

프로그래머스

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

programmers.co.kr

 

 

풀이방법

 

  • 문제에서 원하는 답
    • 해당 타일로 이루어진 카펫의 가로, 세로 길이
    • 이때 가로 > 세로
    • 문제의 경우 노란 타일을 갈색 타일이 감싸고 있는 형식
    • 노란 타일 + 2를 해야 각각의 가로, 세로 길이가 나온다 
    • 두 개의 식을 연립해서 연립방정식으로 풀이
      • 가로 + 세로 = 갈색 - 2 
      • 가로 * 세로 = 노란색 개수
  • 의사코드
    • 노란색의 약수 리스트 구하기
    • 노란색의 약수로 만들어진 리스트 탐색 - for 반복문
      • 탐색을 진행하면서 만약 두 개의 연립방정식을 만족하면 break
      • 이때 연립 방정식은 노란색 타일을 기준으로 풀이가 됨
      • 문제에서 요구하는 답은 가로, 세로의 길이이기에 연립방정식 답에 + 2를 해서 answer에 넣어주기
    • 가로의 길이 > 세로의 길이 → sort로 내림차순 정렬 시행

 

 

풀이코드

 

def solution(brown, yellow):
    answer = []
   
    key = [i for i in range(1,yellow//2+1) if yellow%i == 0]
    key.append(yellow)
            
    for i in range(len(key)):
        x,y = i,len(key)-i-1
        if key[x]+key[y] == brown/2-2 and key[x]*key[y]== yellow:
            answer.append(key[x]+2)
            answer.append(key[y]+2)
            break
    
    return sorted(answer, reverse = True)