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

💡문제 분석 요약

Untitled

테두리 1줄이 갈색인 카펫이 있다.

갈색 격자의 개수와 노란색 격자의 개수를 알 때, 카펫의 너비와 높이를 구하라

입출력 예

brown yellow return
10 2 [4, 3]
8 1 [3, 3]
24 24 [8, 6]

💡알고리즘 설계

완전탐색 문제이므로.. 카펫의 노란 부분이 1줄인지 2줄인지 한줄씩 늘려가며 전부 확인하기로 했다

  1. 카펫의 너비와 높이는 무조건 노란 부분의 너비+2, 높이+2 이고, 카펫의 노란 부분의 넓이+ 갈색 부분의 넓이는 카펫의 높이*너비와 같다. 따라서 갈색 부분이 현재 카펫의 넓이-노란 부분일 경우 답을 return 한다.
  2. 위 조건에 맞지 않을 경우, i를 하나씩 늘리면서 답이 나올때까지 반복한다

💡코드

def solution(brown, yellow):
    # 테두리 1줄은 다 갈색
    # 노랑이가 1줄인지 2줄인지 다 체크하기
    answer = [0,0]
    i=1 #노란 격자가 몇줄인지
    
    while i<=yellow:
        if yellow % i==0:
            if brown==(i+2)*(yellow//i+2)-yellow: #세로*가로
                answer[0]=yellow//i+2
                answer[1]=i+2
                return answer
        i+=1
    
    return answer

💡시간복잡도

while문 → O(n)

조건문 처리 → O(1)

O(n)

💡 틀린 이유