- 처음엔 그냥 bfs로 하려고 하였으나 시간초과 문제로 인해 실패.

- 다른 방식으로 고안 : 가로축으로 한칸씩 늘려가면 노란색 칸은 한칸, 갈색 칸은 두칸씩 증가한다.

- 세로축으로 이동한다면 노란색 칸은 현재 노란색 한줄만큼 늘고, 갈색 칸은 두칸씩 증가한다.

- 따라서, 현재 가로축 길이에서 세로축으로 늘렸을 때, 문제의 조건에 맞는지 검사해주면 된다.

- yellow % y == 0으로 세로로 늘렸을때 노란색 개수가 나누어 떨어지는지 확인하고, b + 2 * ( yellow // y - 1) == brown으로 노란색 개수가 yellow에 도달할 정도로 세로로 늘렸을 때, brown도 도달하는지 확인한다.

- 여기에 추가적으로 늘렸을때 가로축이 더 긴지 확인하면 된다. (cy >= cx + yellow // y - 1)

from collections import deque

def solution(brown, yellow):
    answer = []
    queue = deque([[3, 3, 8, 1]])
    loopcount = 0
    while queue:
        cx, cy, b, y,= queue.popleft()
        if b == brown and y == yellow:
            answer = [cy, cx]
            break
        if yellow % y == 0 and b + 2 * (yellow // y - 1) == brown:
            if cy >= cx + yellow // y - 1:
                answer = [cy, cx + yellow // y - 1]
                break
        queue.append([cx, cy+1, b+2, y+1]) # 오른쪽 이동


    return answer

출처: 프로그래머스 코딩 테스트 연습, https://programmers.co.kr/learn/challenges

'알고리즘[Python] > 프로그래머스' 카테고리의 다른 글

[ Lv 2 ] 구명보트  (0) 2021.06.27
[ Lv 2 ] 다리를 지나는 트럭  (0) 2021.06.26
[ Lv 2 ] 위장  (0) 2021.06.26
[ Lv 2 ] 큰 수 만들기  (0) 2021.06.25
[ Lv 2 ] 괄호 회전하기  (0) 2021.06.25

+ Recent posts