https://school.programmers.co.kr/learn/courses/30/lessons/1844?language=java
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
bfs 기본문제! 자바로 풀어봤습니다 쉽네요.
import java.util.*;
class Solution {
private int i;
private int j;
private int cnt;
public Solution(){
}
public Solution(int i,int j,int cnt){
this.i=i;
this.j=j;
this.cnt=cnt;
}
public int idata(){
return this.i;
}
public int jdata(){
return this.j;
}
public int cntdata(){
return this.cnt;
}
public void idata(int i){
this.i=i;
}
public void jdata(int j){
this.j=j;
}
public void cntdata(int cnt){
this.cnt=cnt;
}
public int solution(int[][] maps) {
int answer = 0;
//ror 게임은 두팀으로 나누어서 진행하며,
//상대 팀 진영을 먼저 파괴하면 이기는 게임 입니다.
//따라서 각 팀은 상대팀 진영에 최대한 빨리 도착하는것이 유리합니다.
//ror
int diri[]={1,-1,0,0};
int dirj[]={0,0,1,-1};
Queue<Solution> q=new LinkedList<>();
int n=maps.length;
int m=maps[0].length;
boolean[][] bVisisted=new boolean[n][m];
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
if(maps[i][j]==0){
bVisisted[i][j]=true;
}
}
}
q.add(new Solution (0,0,1));
bVisisted[0][0]=true;
boolean end=false;
int cnt=0;
while(!q.isEmpty()){
Solution start=q.peek();
q.poll();
if(end==true){
break;
}
for(int i=0;i<4;i++){
int tmpDiri=start.idata()+diri[i];
int tmpDirj=start.jdata()+dirj[i];
if(tmpDiri==-1||tmpDirj==-1||tmpDiri>=n||tmpDirj>=m){
continue;
}
if(bVisisted[tmpDiri][tmpDirj]==true){
continue;
}
q.add(new Solution(tmpDiri,tmpDirj, start.cntdata() + 1 ));
bVisisted[tmpDiri][tmpDirj]=true;
if(tmpDiri==n-1 &&tmpDirj==m-1){
i=4;
answer=start.cntdata() + 1;
end=true;
continue;
}
}
}
if(end==false){
answer=-1;
}
return answer;
}
}
'알고리즘 공부' 카테고리의 다른 글
프로그래머스 네트워크(복습) (0) | 2023.10.20 |
---|---|
프로그래머스 타겟넘버(복습) (0) | 2023.10.19 |
프로그래머스 다리를 지나는 트럭(복습) (1) | 2023.10.18 |
백준 a와 b (복습) (1) | 2023.10.17 |
백준 ABCDE (복습) (0) | 2023.10.16 |