인프런 - it 취업을 위한 알고리즘 문제풀이 (with C/C++) : 코딩테스트 대비 강의를 바탕으로 공부한 내용입니다.
문제는 비공개로 입력예제와 출력예제만을 가지고 포스팅
입력예제 1
5 14
출력예제 1
3
풀이
- 1, -1, 5만큼 좌표 이동이 가능하다
=>봉우리 문제 처럼 특정 방향이나 좌표로 이동할 땐 pos변수를 잡고 배열에 이동방향을 명시해서 가면 된다
=>이때 -1이나 10001 같은 유효하지 않은 좌표로 갈 경우에 continue를 사용해서 막아주는 것이 필요하다
- s위치에서 한번에 갈 수 있는 정점을 찾는다 => 5면 6, 4, 10을 탐색
- 해당 위치가 endpoint랑 같으면 ch[x]를 출력한다 => 여기서 ch배열은 단순히 체크의 역할이 아니라 점프 횟수를 누적한다
- ch[pos]가 이닌 이유는 ch[s]=1이기 때문임
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;
int ch[10001], d[3]={1, -1, 5};
//71. 송아지 찾기 (BFS: 상태트리 탐색)
int main(){
int s, e, i, x, pos;
queue<int> Q;
scanf("%d %d", &s, &e); //현재 위치 S, 송아지 위치 E
ch[s]=1;
Q.push(s);
while(!Q.empty()){
x=Q.front();
Q.pop();
for(i=0; i<3; i++){
pos=x+d[i]; //가려고 하는 지점
if(pos<=0 || pos>10000) continue;
if(pos==e){
printf("%d\n", ch[x]);
exit(0);
}if(ch[pos]==0){
ch[pos]=ch[x]+1; //점프 횟수
Q.push(pos);
}
}
}
return 0;
}
'알고리즘' 카테고리의 다른 글
73. 최대힙 [우선순위 큐 이용] (0) | 2021.02.02 |
---|---|
72. 공주구하기[조세퍼스 Queue 이용] (0) | 2021.02.01 |
70. 그래프 최단거리 [BFS] (0) | 2021.01.28 |
69. 이진트리 넓이 우선 탐색 [BFS] (0) | 2021.01.27 |
68. 최소비용 [DFS: 가중치 방향그래프 인접리스트] (0) | 2021.01.26 |