티스토리 뷰
출저 : https://www.acmicpc.net/problem/14226
"BFS, visited 배열을 잘 생각하자.."
해당 문제를 풀다가 visited[] 배열을 어디까지 할까 고민하다.... 1001 로 해서 런타임 에러, 2002 로 했더니 틀렸다....
잘 생각해보니 특정 이모티콘 길이에 도착했을 때, 버퍼에 1글자를 가지고 오는것과 10글자를 가지고 오는 것은 다른 경우...
따라서 이차원 배열을 방문체크 배열로 해야한다.
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 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 | import java.io.IOException; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner; public class Main { static int S; static boolean[][] visited = new boolean[2002][2002]; static Queue<Node> q = new LinkedList<>(); static int min; public static void main(String[] args) throws IOException { Scanner sc = new Scanner(System.in); S = sc.nextInt(); visited[1][0] = true; q.add(new Node(1, 0, 0)); while(!q.isEmpty()) { Node cur = q.poll(); if(cur.len == S) { min = cur.cnt; break; } // copy q.add(new Node(cur.len, cur.len, cur.cnt+1)); // paste if(cur.buf != 0 && !visited[cur.len+cur.buf][cur.buf] && cur.len+cur.buf <= 1000) { visited[cur.len+cur.buf][cur.buf] = true; q.add(new Node(cur.len+cur.buf, cur.buf, cur.cnt+1)); } // delete if(cur.len > 0 && !visited[cur.len-1][cur.buf] && cur.len-1 <= 1000) { visited[cur.len-1][cur.buf] = true; q.add(new Node(cur.len-1, cur.buf, cur.cnt+1)); } } System.out.println(min); } } class Node { int len; int buf; int cnt; Node ( int len, int buf, int cnt) { this.len = len; this.buf = buf; this.cnt = cnt; } } | cs |
'Study > 알고리즘 문제풀이' 카테고리의 다른 글
백준 11967. 불켜기 :: 돼지개발자 (0) | 2018.12.05 |
---|---|
백준 15663. N과 M (9) :: 돼지개발자 (0) | 2018.12.05 |
백준 2839. 설탕 배달 :: 돼지개발자 (0) | 2018.12.05 |
백준 15649. N과 M(1) :: 돼지개발자 (0) | 2018.12.04 |
백준 8911. 거북이 :: 돼지개발자 (0) | 2018.12.04 |
댓글
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday