[프로그래머스] Lv.2 카펫 (Python)

seulzzang·2022년 10월 4일
0

코딩테스트 연습

목록 보기
23/44
post-thumbnail

📍문제

[프로그래머스] Lv.2 카펫

📍풀이

  • 카테고리가 완전탐색이라서 도대체 완전탐색이란 몰까.. 생각하다가 그냥 방정식 세워서 풀자..함..😂
  • 노란색 부분을 기준으로 방정식을 세워줬다. 3번 조건은 가로의 길이는 세로보다 길거나 같다 조건이 있어서 넣어줬다. 이러한 방정식을 기반으로 코드를 짜면 됨!!

💻코드

def solution(brown, yellow):
    answer = []
    yellow_x = 0
    yellow_y = 0
    for i in range(1, yellow+1):
        if yellow % i == 0:
            yellow_x = yellow // i
            yellow_y = i
            if 2*yellow_x + 2*yellow_y + 4 == brown:
                answer.append(yellow_x+2)
                answer.append(yellow_y+2)
                break 
            answer.sort(reverse = True)
    return answer

yellow의 크기만큼 for문을 돌려준다.
1. yellow % iyellow_xyellow_y를 구한다. 나누어 떨어지면 그 몫이 가로가 되고, i가 세로가 된다.
2. 두번째 if문에서 2x+2y+4 == brown 조건을 넣어준다. 각각에 +2씩 해주면 전체 가로세로가 나오므로 이를 answer에 담아주고 break.
3. 가로의 길이는 세로보다 길거나 같다는 조건이 있으므로 내림차순으로 정렬해준 다음 return하면 된다.

📍다른사람 풀이

import math
def solution(brown, yellow):
    w = ((brown+4)/2 + math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
    h = ((brown+4)/2 - math.sqrt(((brown+4)/2)**2-4*(brown+yellow)))/2
    return [w,h]

그냥 아예 근의 공식 이용해서 푸는 방법도 있다..
내 생각엔 이게 훨 나은듯.. 직관적이잔냐


무조건 예시에 나온것 처럼 갈색이 한줄 둘러져있는 중앙이 노란색인 카펫이란 것을 깨닫는다면 방정식 세워서 푸는 것이 쉬운 문제인듯 하다. 근데 난 도대체 이게 완전탐색이랑 먼상관이지? 라는 생각만 든다.. 알고리즘이란 뭘까...

profile
중요한 것은 꺾이지 않는 마음

1개의 댓글

comment-user-thumbnail
2023년 11월 8일

잘보고 갑니다.
감사합니다.

답글 달기