반응형

https://www.acmicpc.net/problem/14226

 

14226번: 이모티콘

영선이는 매우 기쁘기 때문에, 효빈이에게 스마일 이모티콘을 S개 보내려고 한다. 영선이는 이미 화면에 이모티콘 1개를 입력했다. 이제, 다음과 같은 3가지 연산만 사용해서 이모티콘을 S개 만

www.acmicpc.net

 

화면에 입력된 이모티콘 개수가 x개이고, 이 때의 클립보드에 복사된 이모티콘 개수가 y개인 경우에는 중복해서 방문하지 않았습니다.

 

#include <iostream>
#include <queue>
using namespace std;
int main() {
	int s;
	bool v[1001][1001] = { false }; // 화면 이모티콘 x개에서 y개의 클립보드 상태 방문 여부
	scanf("%d", &s);
	queue<pair<pair<int, int>, int>> q;
	q.push({ { 1, 0 }, 0});
	while (!q.empty()) {
		int n = q.front().first.first; // 개수
		int t = q.front().first.second; // 시간
		int c = q.front().second; // 클립보드
		q.pop();
		if (n == s) {
			printf("%d", t);
			break;
		}
		if (n != 0 && !v[n][n]) { // 1번. 클립보드에 복사할 갯수가 있고 아직 복사 안했을 경우.
			q.push({ { n, t + 1}, n });
			v[n][n] = true;
		}
		if (c != 0 && n + c < 1001 && !v[n + c][c]) { // 2번. 클립보드에 개수가 있을 경우.
			q.push({ { n + c, t + 1}, c });
			v[n + c][c] = true;
		}
		if (n > 1 && !v[n - 1][c]) { // 3번. 0개, 1개일 경우엔 굳이 안 지워도됨.
			q.push({ { n - 1, t + 1 }, c });
			v[n - 1][c] = true;
		}
	}
}

 

반응형

'Algorithm' 카테고리의 다른 글

백준 15988 : 1, 2, 3 더하기 3  (0) 2021.11.12
백준 11727 : 2xn 타일링 2  (0) 2021.11.12
백준 4963 : 섬의 개수  (0) 2021.11.12
백준 1707 : 이분 그래프  (0) 2021.11.11
백준 11723 : 집합  (0) 2021.11.11

+ Recent posts