bingual 2024. 2. 4. 23:43
반응형

 

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

 

프로그래머스

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

programmers.co.kr

문제풀이

전체 면적이 주어졌을때 테스트 케이스의 결과와 같은 가로와 세로 크기를 구해야 되는 완전탐색 문제다. 면적의 약수를 구하고 둘레의 가장자리의 크기가 yellow와 같다면 해당 결과를 반환하면 된다.

def solution(brown, yellow):
    area = brown + yellow

    for i in range(2, int(area**0.5) + 1):
        if area % i == 0:
            width = area // i
            height = i

            if (width - 2) * (height - 2) == yellow:
                return [width, height]

 

 

 

테스트 케이스를 재현 하여 격자를 그려본다면 위와 같은 결과가 나온다. 제한조건의 특성상 Y는 과반수가 될 수 가 있으며 나머지가 될 수 도 있다 그렇기에 둘레의 가장자리는 Y로 형성되는 경우가 많아진다. 문제의 특성을 아예 지워버리고 근의 공식으로 풀이를 할 수 도 있다.

from io import StringIO


def draw_grid(width, height):
    buffer = StringIO()

    for i in range(height):
        for j in range(width):
            if i == 0 or i == height - 1 or j == 0 or j == width - 1:
                buffer.write("B ")
            else:
                buffer.write("Y ")
        buffer.write("\n")

    return print(buffer.getvalue().rstrip())


draw_grid(4, 3)
print()
draw_grid(3, 3)
print()
draw_grid(8, 6)