-
[백준][자바][9205]맥주 마시면서 걸어가기코딩/알고리즘 2019. 10. 2. 17:21
맥주 마시면서 걸어가기
이 문제를 잘 생각해보면 거리가 20병이 최대고 그러면 이동할수 있는 거리가 최대 1000이라는 이야기가 된다
그에 따라 편의점에 갈수 있는지 없는지를 분기처리해서 q에 넣고 빼면 된다.
package back; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.LinkedList; import java.util.Queue; import java.util.StringTokenizer; class MPoint{ int y; int x; MPoint(int y, int x) { this.y = y; this.x = x; } } public class Main_backjoon_9205_맥주마시면서걸어가기 { static int TESTCASE; static int N; static int startX; static int startY; static int endX; static int endY; static Queue q = new LinkedList(); static LinkedList pq = new LinkedList(); public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer st = new StringTokenizer(br.readLine(), ""); TESTCASE = Integer.parseInt(st.nextToken()); for(int T= 0 ; T < TESTCASE; T++) { q = new LinkedList(); pq = new LinkedList(); st = new StringTokenizer(br.readLine(), ""); N = Integer.parseInt(st.nextToken()); st = new StringTokenizer(br.readLine(), " "); //상근이 집 startY = Integer.parseInt(st.nextToken()); startX = Integer.parseInt(st.nextToken()); q.add(new MPoint(startY, startX)); //편의점 for(int i = 0 ; i < N; i++){ st = new StringTokenizer(br.readLine(), " "); int y = Integer.parseInt(st.nextToken()); int x = Integer.parseInt(st.nextToken()); pq.add(new MPoint(y,x)); } st = new StringTokenizer(br.readLine(), " "); endY = Integer.parseInt(st.nextToken()); endX = Integer.parseInt(st.nextToken()); solve(); } } public static void solve() { while(!q.isEmpty()) { MPoint mp = q.poll(); int yy = mp.y; int xx = mp.x; int distance = getDistance(endY, yy, endX, xx ); //System.out.println("distance " + distance); if( distance > 1000) { //아직 distance가 1000보다 크다면 int pqSize = pq.size(); for(int s = 0; s < pqSize; s++ ) { //편의점 LOOP MPoint tp = pq.poll(); int pyy = tp.y; int pxx = tp.x; int newDistance = getDistance(yy, pyy, xx, pxx ); if(newDistance <= 1000) { //1000보다 작은 친구들 q.add(); q.add(new MPoint(pyy, pxx)); }else { // pq.add(tp); } } }else { // solve System.out.println("happy"); return; } } System.out.println("sad"); } public static Integer getDistance(int p1, int q1, int p2, int q2){ return Math.abs(p1 -q1) + Math.abs(p2 - q2); } }
'코딩 > 알고리즘' 카테고리의 다른 글
[백준][자바][파이프옮기기1]17070 (0) 2019.11.01 [백준][자바][17135]캐슬디펜스 (0) 2019.10.23 [백준][자바][5017]스타트링크 (0) 2019.10.01 [백준][자바][14442]벽부수고 이동하기 2 (0) 2019.09.11 [ 백준 ] [ 자바 ][ 1194] 달이 차오른다 가자 (0) 2019.09.08