일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- #알고리즘 #백준 #17136 #백준17136 #algorithm #baekjoon #baekjoon17136 #C++
- 책리뷰
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #문자열압축 #programmers #C++
- #알고리즘 #백준 #15683 #백준15683 #algorithm #baekjoon #baekjoon15683 #C++
- #알고리즘 #백준 #2573 #백준2573 #algorithm #baekjoon #baekjoon2573 #C++
- #알고리즘 #백준 #1987 #백준1987 #algorithm #baekjoon #baekjoon1987 #Java
- #알고리즘 #백준 #1525 #백준1525 #algorithm #baekjoon #baekjoon1525 #C++
- 클린코드
- CleanCode
- #알고리즘 #백준 #1260 #백준1260 #algorithm #baekjoon #baekjoon1260 #Java
- #알고리즘 #백준 #1793 #백준1793 #algorithm #baekjoon #baekjoon1793 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #괄호변환 #programmers #C++
- #알고리즘 #백준 #12094 #백준12094 #algorithm #baekjoon #baekjoon12094 #C++
- #알고리즘 #백준 #17472 #백준17472 #algorithm #baekjoon #baekjoon17472 #C++
- 개발서
- #알고리즘 #백준 #17406 #백준17406 #algorithm #baekjoon #baekjoon17406 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #외벽점검 #programmers #C++
- #알고리즘 #백준 #14888 #백준14888 #algorithm #baekjoon #baekjoon14888 #C++
- #알고리즘 #백준 #2352 #백준2352 #algorithm #baekjoon #baekjoon2352 #C++
- #알고리즘 #백준 #15684 #백준15684 #algorithm #baekjoon #baekjoon15684 #C++
- #알고리즘 #algorithm #프로그래머스 #2020카카오공채 #블록이동하기 #programmers #C++
- #알고리즘 #백준 #2616 #백준2616 #algorithm #baekjoon #baekjoon2616 #Java
- #알고리즘 #백준 #3190 #백준3190 #algorithm #baekjoon #baekjoon3190 #C++
- #알고리즘 #백준 #5214 #백준5214 #algorithm #baekjoon #baekjoon5214 #C++
- #알고리즘 #백준 #17140 #백준17140 #algorithm #baekjoon #baekjoon17140 #C++
- #알고리즘 #백준 #2580 #백준2580 #algorithm #baekjoon #baekjoon2580 #Java
- #알고리즘 #백준 #4386 #백준4386 #algorithm #baekjoon #baekjoon4386 #C++
- 스레드 #동시성 #thread #process #
- #알고리즘 #백준 #17837 #백준17837 #algorithm #baekjoon #baekjoon17837 #C++
- 개발자취미
Archives
- Today
- Total
개발자 일기장.
백준 1525. 퍼즐 본문
퍼즐
Problem?
문제.
Solution
따로 어려웠던 부분 없이 쉬웠던 분제
배열 대신 string으로 bfs()를 사용하는 방법을 이용하면 간단한 문제이다.
string으로 bfs()을 사용한다.
'set'을 이용해서 방문여부를 확인했다.
가정 bfs() : 갈 수 있는 경로 탐색
endStr : 원하는 답 visited : 방문여부 확인<string set> dx, dy : 이동 방향 |
Code
#include <iostream>
#include <queue>
#include <algorithm>
#include <string>
#include <set>
using namespace std;
#define MAX 3
int dx[] = { -1, 0, 1, 0 };
int dy[] = { 0, -1, 0, 1 };
string endStr = "123456780";
set<string> visited;
int bfs(string init_str) {
queue<pair<string, int>> q;
q.push({ init_str, 0 });
visited.insert(init_str);
while (!q.empty()) {
string curStr = q.front().first;
int curCnt = q.front().second;
int zero_pos = curStr.find("0");
int curY = zero_pos / 3;
int curX = zero_pos % 3;
q.pop();
if (curStr.compare(endStr) == 0)
return curCnt;
// check all
for (int dir = 0; dir < 4; dir++) {
int nextY = curY + dy[dir];
int nextX = curX + dx[dir];
int next_pos = nextY * 3 + nextX;
if (0 <= nextY && nextY < MAX && 0 <= nextX && nextX < MAX) {
string tmp(curStr);
tmp[zero_pos] = tmp[next_pos];
tmp[next_pos] = '0';
if (visited.find(tmp) == visited.end()) {
q.push({ tmp, curCnt + 1 });
visited.insert(tmp);
}
}
}
}
return -1;
}
int main() {
// input
int key;
string init_str;
for (int i = 0; i < MAX; i++)
for (int j = 0; j < MAX; j++) {
scanf("%d", &key);
init_str += to_string(key);
}
// solution
int ans = bfs(init_str);
// output
cout << ans << "\n";
return 0;
}
코딩 실력 점점 발전 중
'취업 > Algorithm.' 카테고리의 다른 글
[2020 카카오 공채] 문자열 압축 (0) | 2020.03.22 |
---|---|
백준 17136. 색종이 붙이기 (0) | 2020.03.22 |
백준 4386. 별자리 만들기 (0) | 2020.03.16 |
백준 1647. 도시 분할 계획 (0) | 2020.03.16 |
백준 1197. 최소 스패닝 트리 (0) | 2020.03.07 |