문제 URL : https://school.programmers.co.kr/learn/courses/30/lessons/169199
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
문제 접근법: bfs문제입니다.
난이도는 쉬우니 딱히 크게 얘기는 하지 않겠고 이동할때 벽을부딪힐때까지만 이동해서 G를 이동만하면되는 문제입니다.
소스코드 :
#include <bits/stdc++.h>
using namespace std;
int n,m;
int dy[4]={-1,0,1,0};
int dx[4]={0,1,0,-1};
bool isrange(int y,int x){
return 0<=y&&y<n&&0<=x&&x<m;
}
int bfs(vector<string> &board){
vector<vector<int>>check(n,vector<int>(m));
int cnt=0;
queue<pair<int,int>> q;
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(board[i][j]=='R'){
q.push({i,j});
check[i][j]=1;
}
}
}
while(!q.empty()){
int qsize=q.size();
while(qsize--){
int y,x;
tie(y,x)=q.front();
q.pop();
if(board[y][x]=='G')return cnt;
for(int i=0;i<4;i++){
int ny=y+dy[i];
int nx=x+dx[i];
while(isrange(ny,nx)&&board[ny][nx]!='D'){
ny+=dy[i];
nx+=dx[i];
}
ny-=dy[i];
nx-=dx[i];
if(check[ny][nx]==0){
q.push({ny,nx});
check[ny][nx]=1;
}
}
}
cnt++;
}
return -1;
}
int solution(vector<string> board) {
int answer = 0;
n=board.size();
m=board[0].size();
return bfs(board);
}
궁금한점 혹은 모르는점 어떤 질문이든 댓글은 언제나 환영입니다.
'프로그래머스' 카테고리의 다른 글
프로그래머스 혼자서 하는 틱택토 (0) | 2023.12.14 |
---|---|
프로그래머스 스타수열 (python) (4) | 2023.12.07 |
프로그래머스 과제 진행하기 (0) | 2023.07.25 |
프로그래머스 2차원 동전 뒤집기 (시간좀 줄여보기) (2) | 2022.12.28 |
프로그래머스 숫자 타자 대회 (0) | 2022.12.19 |