PS (C, C++)
[백준/C++] 14226 이모티콘
최연재
2024. 11. 14. 02:15
https://www.acmicpc.net/problem/14226
코드
#include <iostream>
#include <queue>
using namespace std;
#define MAX 1001
#define FASTIO ios::sync_with_stdio(false); cin.tie(NULL);
int s;
bool visited[MAX][MAX];
struct d {
int cnt;
int clip;
int time;
};
void bfs() {
queue<d> q;
q.push({ 1, 0, 0 });
visited[1][0] = 1;
while (!q.empty()) {
int cnt = q.front().cnt;
int clip = q.front().clip;
int time = q.front().time;
q.pop();
if (cnt == s) {
cout << time;
return;
}
if (visited[cnt][cnt] == 0) {
visited[cnt][cnt] = true;
q.push({ cnt, cnt, time + 1 });
}
if (clip > 0 && cnt + clip < MAX && visited[cnt + clip][clip] == 0) {
visited[cnt + clip][clip] = true;
q.push({ cnt + clip, clip, time + 1 });
}
if (cnt - 1 >= 0 && visited[cnt - 1][clip] == 0) {
visited[cnt - 1][clip] = true;
q.push({ cnt - 1, clip, time + 1 });
}
}
}
int main() {
FASTIO;
cin >> s;
bfs();
return 0;
}
설명
현재 화면에 있는 이모티콘 수와 클립보드에 있는 이모티콘 수를 가지고 BFS를 돌리면 됩니다. 1~3번의 상황을 각각 IF문으로 구현하고, cnt가 s일 때의 시간을 출력합니다.
느낀 점
BFS로 풀이했습니다.