어흥

[백준 14226] 이모티콘 (C++) 본문

알고리즘/백준

[백준 14226] 이모티콘 (C++)

라이언납시오 2020. 6. 9. 21:41
728x90
반응형

문제 링크: https://www.acmicpc.net/problem/14226

 

14226번: 이모티콘

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

www.acmicpc.net

1. 주의할 점

- BFS를 통해 해결하며, 현재 이모티콘의 길이만큼만 비교하는 배열을 사용하면 틀린 답이 나온다(ex. 872 -> 22가 나와야 한다)

 

2. 구현

- Check[][]배열을 통해 현재 이모티콘의 길이, 현재 클립보드에 저장되어있는 길이를 비교한다

- 입력으로 1이 주어지는 경우 바로 0을 출력한다

- 현재 이모티콘의 길이가 구하고자 하는 값과 같다면 Result와 비교하여 갱신한다

- Result를 갱신하는 If문을 제외하고, 첫 번째 If문은 현재 화면에 나타난 이모티콘 1개를 삭제하는 경우(문제 3번)

- 두 번째 If문은 현재 클립보드에 저장되어 있는 이모티콘의 길이만큼 추가하는 경우(문제 2번)

- 마지막 If문은 클립보드에 현재 이모티콘의 길이만큼 복사하는 경우(문제 1번)

 

#define MAX 987654321
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
struct info {
	int len, val, copy;
};
info tmp;
int check[1001][1001], num;

int main() {
	ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL);
	for (int i = 1; i <= 1000; i++)
		for(int j=0;j<=1000;j++)
			check[i][j] = MAX;
	cin >> num;
	int result = MAX;
	if (num == 1) cout << 0;	
	else {
		queue<info> q;
		tmp.len = 1;
		tmp.val = 0;
		tmp.copy = 0;
		check[1][0] = 0;
		q.push(tmp);
		while (!q.empty()) {
			int cl = q.front().len;
			int cv = q.front().val;
			int cp = q.front().copy;
			q.pop();
			if (cl == num) 
				result = min(result, cv);			
			if (cl - 1 > 0 && check[cl - 1][cp] > cv + 1) {
				check[cl - 1][cp] = cv + 1;
				tmp.len = cl - 1;
				tmp.val = cv + 1;
				tmp.copy = cp;
				q.push(tmp);
			}
			if (cp>0 && cp+cl<=1000 && check[cp+cl][cp]>cv+1) {
				check[cp + cl][cp] = cv + 1;
				tmp.len = cp + cl;
				tmp.val = cv + 1;
				tmp.copy = cp;
				q.push(tmp);
			}
			if (check[cl][cl]>cv+1 && cv + 1 < result) {
				tmp.copy = cl;
				tmp.val = cv + 1;
				tmp.len = cl;
				q.push(tmp);
			}
		}
		cout << result;
	}
	return 0;
}
728x90
반응형

'알고리즘 > 백준' 카테고리의 다른 글

[백준 1342] 행운의 문자열 (C++)  (0) 2020.06.10
[백준 2002] 추월 (C++)  (0) 2020.06.10
[백준 12886] 돌 그룹 (C++)  (0) 2020.06.09
[백준 14719] 빗물 (C++)  (0) 2020.06.09
[백준 17825] 주사위 윷놀이 (C++)  (0) 2020.06.06
Comments