Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 후쿠오카 요도바시 하카타
- 큐
- 후쿠오카 캐널시티
- 삼성시험
- 삼성 SW 테스트
- 다이나믹 프로그래밍
- 완전탐색
- 플로이드
- 하카타역
- 후쿠오카
- 백준
- 너비 우선 탐색
- IOS
- queue
- 플로이드 와샬
- DP
- 일본 여행
- BFS
- 알고리즘
- 삼성테스트
- brute force
- BOJ
- 미로찾기
- 후쿠오카 여행경비
- deque
- dfs
- 후쿠오카 4박 5일
- 완전 탐색
- 시뮬레이션
- 깊이 우선 탐색
Archives
- Today
- Total
맛있는감귤
BOJ : 14226 이모티콘 본문
문제 : 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<int, int>> q; bool visited[2002][2002]; int main(){ scanf("%d",&S); q.push(make_pair(1, 0)); 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 |