맛있는감귤

BOJ : 14226 이모티콘 본문

알고리즘/백준 알고리즘

BOJ : 14226 이모티콘

맛있는감귤 2017. 4. 28. 00:18

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

간단한 BFS이지만 visited 배열을 잘 활용하지 못한다면 원하는 정답이 안나올 것이다.

현재 글자수 뿐만아니라 클립보드에 저장 돼 있는 글자 수도 고려해줘야 한다.

핵심 visited[글자수][클립보드]

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
32
33
34
35
36
37
38
39
40
41
#include <cstdio>
#include <queue>
using namespace std;
int S,cnt=0;
queue<pair<intint>> q;
bool visited[2002][2002];
int main(){
    scanf("%d",&S);
    q.push(make_pair(10));
    visited[1][0]=1;
    while(!q.empty()){
        int sz=q.size();
        while(sz--){
            int len = q.front().first;
            int clip = q.front().second;
            q.pop();
            
            if(len == S){
                printf("%d\n",cnt);
                return 0;
            }
            
            //1. copy
            int c = len;
            q.push(make_pair(len, c));
            
            //2. paste
            if(clip!=-1) {
                int l = len+clip;
                if(!visited[l][clip] && l<=1000) q.push(make_pair(l, clip));
                visited[l][clip] = 1;
            }
            
            //3. remove emoji
            int l = len-1;
            if(!visited[l][clip] && l>1) q.push(make_pair(l, clip));
            visited[l][clip] = 1;
        }
        cnt++;
    }
}
cs

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

BOJ : 1074 Z  (2) 2017.04.28
BOJ : 5214 환승  (2) 2017.04.28
BOJ : 13913 숨바꼭질4  (0) 2017.04.28
BOJ : 14442 벽 부수고 이동하기2  (0) 2017.03.26
BOJ : 9095 1,2,3 더하기  (0) 2017.03.26