본문 바로가기
알고리즘/programmers

2022 KAKAO BLIND RECRUITMENT / 사라지는 발판

by 유이얼 2022. 10. 3.

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

 

프로그래머스

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

programmers.co.kr

#include <string>
#include <vector>

using namespace std;

using vi = vector<int>;
using vvi = vector<vi>;

int dir[] = { -1, 0, 1, 0, -1 };
vvi board;

int f(vi cur, vi next) {
    int cy = cur[0], cx = cur[1];
    if (board[cy][cx] == 0)
        return 0;

    int N = board.size(), M = board[0].size();
    int result = 0;

    for (int i = 0; i < 4; ++i) {
        cur[0] = cy + dir[i];
        cur[1] = cx + dir[i + 1];

        if (cur[0] < 0 || cur[0] >= N || cur[1] < 0 || cur[1] >= M) continue;
        if (board[cur[0]][cur[1]] == 0) continue;

        board[cy][cx] = 0;
        int r = f(next, cur) + 1;
        board[cy][cx] = 1;

        if (r % 2) {
            if (result % 2) result = min(result, r);
            else result = r;
        }
        else {
            if ((result % 2) == 0) result = max(result, r);
        }
    }

    return result;
}


int solution(vector<vector<int>> brd, vector<int> aloc, vector<int> bloc) {
    board = brd;
    return f(aloc, bloc);
}