반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- tomcat7
- npm
- 방이편백육분삼십성신여대
- 성신여대맛집
- 방이편백육분삼십
- gradle
- 통영예쁜카페
- ubuntu자바설치
- 한성대맛집
- 통영
- 통영에어비앤비
- 퇴사후공무원
- 자바스크립트에러처리
- springboot
- 돈암동맛집
- react
- 파이썬
- 영화추천
- 꼴뚜기회
- 뚝섬역맛집
- 공무원
- 성신여대편백집
- ELK
- JavaScript
- 통영여행
- 스페인여행
- 성북구맛집
- 한남동맛집
- 국가직
- 서울숲누룽지통닭구이
Archives
- Today
- Total
코린이의 기록
[BOJ] 1697 - 숨바꼭질 (C++) 본문
반응형
1. 알고리즘
이 문제는 BFS 알고리즘으로 풀 수 있는 문제이다. 즉, Queue를 사용하여 문제를 푼다.
2. 전체 소스
#include <iostream>
#include <queue>
using namespace std;
//1697
const int MAX = 200000;
int check[MAX+1]; // 탐색 시 해당 값을 이미 방문했는지의 여부를 확인하기위해 사용되는 배열
int dist[MAX+1]; // 트리의 깊이를 구하기 위하여 사용되는 배열 (몇번만에 찾는지 확인하기위함)
int main() {
int subin, sis;
cin >> subin >> sis;
queue <int> q;
q.push(subin); // 초기 값을 Queue에 넣어준다.
check[subin] = 1; // 초기 값은 무조건 방문 여부를 true로 설정하여 시작하여야 한다.
dist[subin] = 0; // 초기 값의 깊이는 0이다.
while (!q.empty()) {
int now = q.front();
q.pop();
if (now == sis) // 동생의 위치를 찾으면 loop문을 빠져나온다.
break;
if (now-1 >= 0 && !check[now-1]) { // -1 했을 때 값을 방문했는지 여부를 확인
q.push(now - 1);
check[now - 1] = 1;
dist[now - 1] = dist[now] + 1; // 현재 위치한 깊이에서 +1을 해준다.
}
if (now + 1 > 0 && now + 1 < MAX && !check[now + 1]) { // +1 했을 때 값을 방문했는지 여부 확인
q.push(now + 1);
check[now + 1] = 1;
dist[now + 1] = dist[now] + 1;
}
if (now * 2 > 0 && now * 2 < MAX && !check[now * 2]) { // *2 했을 때 값을 방문했는지 여부 확인
q.push(now * 2);
check[now * 2] = 1;
dist[now * 2] = dist[now] + 1;
}
}
cout << dist[sis] << endl;
return 0;
}
3. 참고 사항
처음에 런타임 오류가 발생했다.
백준에서 런타임 오류가 발생하는 경우는 대게 배열의 메모리 할당 공간 문제의 이유로 발생하게 된다. 즉 사용하고자 하는 메모리 공간보다 할당되어 있는 메모리 공간이 작을 경우 발생하게 된다. 나의 경우는 now변수로 check와 dist 배열의 크기가 동적으로 할당되는데, 이때 해당 변수가 MAX값 보다 작을때의 조건을 추가해주어서 런타임 오류를 해결했다.
if (now * 2 > 0 && now * 2 < MAX && !check[now * 2]) {
4. 문제
백준 알고리즘 : https://www.acmicpc.net/problem/1697
반응형
'c&c++ > 백준' 카테고리의 다른 글
[BOJ] 9095 - 1,2,3 더하기 (C++) (0) | 2018.05.08 |
---|---|
[BOJ] 11727 - 타일링2 (C++) (0) | 2018.05.08 |
[BOJ] 1463 - 1로 만들기 (C++) (0) | 2018.05.08 |
[BOJ] 10971 - 외판원 순회2 (C++) (0) | 2018.05.08 |
[BOJ] 10819 - 차이를 최대로 (C++) (0) | 2018.05.08 |
Comments