[프로그래머스] 카펫

Doodung·2022년 3월 10일
0

코딩테스트

목록 보기
7/8
post-thumbnail

문제 링크

카펫

완전탐색 문제이다.
brown과 yellow 카펫의 갯수가 주어지고, 가로 세로 길이를 리턴하면 된다.
카펫의 가로 길이는 세로 길이와 같거나, 세로 길이보다 길다는 조건이 있으므로
긴 부분은 무조건 가로라고 생각하고 문제를 풀었다.


코드

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

    for i in range(1,int(math.sqrt(yellow))+1):
        if yellow%i==0:
            temp.append([yellow//i,yellow//(yellow//i)])

    for i in range(len(temp)):
        if brown == (temp[i][0]*2)+(temp[i][1]*2)+4:
            answer=[temp[i][0]+2,temp[i][1]+2]
    
    return answer

설명

반복문으로 yellow1에서부터 루트yellow+1까지 돌며
temp[yellow//i, yellow//(yellow//i)] 를 추가해준다.

이는 yellow 카펫의 갯수가 주어졌을 때, 가능한 가로,세로의 길이를 모두 구하는 과정이다.
범위를 루트yellow+1로 한정시킨 이유는 길이가 긴 부분이 가로이기 때문에, 중복된 값을 피하기 위해서이다.
예를들어 yellow가 24일 경우 temp[[24, 1], [12, 2], [8, 3], [6, 4]]가 들어가게 된다.
yellow가 24일 경우 가로24x세로1, 가로12x세로2, 가로8x세로3, 가로6x세로4가 될 수 있다는 것이다.

temp안의 리스트중 진짜 yellow의 가로, 세로 길이를 찾아야 하는 과정이다.
temp의 길이만큼 반복문을 돌며 brown의 갯수를 구한다.
yellow의 가로, 세로 길이를 알면 다음과 같은 방식으로 brown의 갯수를 구할 수 있다.

이 값이 주어진 brown의 갯수와 같다면, yellow의 진짜 가로 세로 길이를 구할 수 있는 것이다.

정답은 카펫 전체의 가로, 세로 길이를 구하는 것이기 때문에
yellow의 가로 길이+2, yellow의 세로 길이+2를 return 해주면 된다.

profile
반가워요!

0개의 댓글