public:
int snakesAndLadders(vector<vector<int>>& board) {
unordered_map<int, pair<int, int>> points;
int n2 = board.size()*board[0].size();
int number = 1;
int count = 0;
for(int i = board.size() -1 ; i >= 0; i--) {
int is_odd = (count++%2) ? 1: 0;
for(int j = 0; j < board.size(); j++) {
points[number++] = {i, abs((int)(board.size() - 1)*is_odd - j)};
}
}
vector<int> check(n2,0);
queue<pair<int, int>> q;
q.push({1, 0});
while(!q.empty()) {
auto [num, count] = q.front();
q.pop();
for(int i = 1; i <= 6 && i + count <= n2 ; i++) {
int new_num = num + i;
int y = points[new_num].first;
int x = points[new_num].second;
new_num = (board[y][x] == -1)? new_num : board[y][x];
if(new_num == n2) {
return count + 1;
}
if(!check[new_num]) {
q.push({new_num, count+1});
check[new_num] = 1;
}
}
}
return -1;
}
};
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.