Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
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
Archives
Today
Total
관리 메뉴

최's 먹공로그

BOJ9205 맥주 마시면서 걸어가기 본문

APS

BOJ9205 맥주 마시면서 걸어가기

ChoiSH313 2022. 6. 26. 18:00

<Solution>

※ 음수좌표의 경우를 생각 못함

1. 입력받은 좌표를 더해서 하나의 상수로 생각

2. 상근위치 + 맥주 최대거리 계산 >= 페스티벌 위치 이면 happy

3. 상근위치 + 맥주 최대거리 계산 >= 편의점 중 가장 멀리 갈 수 있는 편의점 이면 상근위치를 해당 편의점 위치로 갱신

4. 갈 수 없는 경우는 현재위치에서 페스티벌 장소로 갈 수 없고 편의점으로도 갈 곳이 없을 때 sad

 

<Source Code>

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.Collections;
import java.util.StringTokenizer;

public class BOJ9205_맥주마시면서걸어가기 {

	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine(), "");
		int t = Integer.parseInt(st.nextToken());
		for(int tc = 0; tc < t; tc++) {
			st = new StringTokenizer(br.readLine(), "");
			int n = Integer.parseInt(st.nextToken()); // 편의점 개수
			Integer[] n_array = new Integer[n]; // 편의점 위치 배열
			int[] n_visit = new int[n];
			st = new StringTokenizer(br.readLine(), " ");
			int house = Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()); // 상근이네
			for(int ni = 0; ni < n; ni++) {
				st = new StringTokenizer(br.readLine(), " ");
				n_array[ni] = Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken());
			}
			st = new StringTokenizer(br.readLine(), " ");
			int festival = Integer.parseInt(st.nextToken()) + Integer.parseInt(st.nextToken()); // 축제위치
			int beer = 20; // 최초 맥주 20개로 시작
			Arrays.sort(n_array, Collections.reverseOrder());
			
			// 맥주 먹으면 걸어가보기
			while(house < festival) {
				// 1. 현재 맥주 최대로 먹고 페스티벌 위치까지 갈수있나??
				if((beer * 50) + house >= festival) {
					System.out.print("happy");
					house = festival;
					break;
				}
				// 2. 현재 맥주 최대로 먹고 편의점 갈 수 있는 곳이 있는가??
				int house_temp = house;
				for(int ni = 0; ni < n; ni++) {
					if((beer * 50) + house >= n_array[ni] && n_visit[ni] == 0) {
						house = n_array[ni];
						n_visit[ni] = 1;
					}
				}
				// 3. 갈수없다 -> 현재위치에서 페스티벌 장소로 갈 수도 없고 더 갈수있는 편의점이 없다
				if((beer * 50) + house < festival && house == house_temp) {
					System.out.print("sad");
					break;
				}
			}
		}
	}
}

생각 못한 경우 다 음수로 들어왔을 때

1
2
-1 -1
-1000 0
-1000 -1000
-2000 -1000

위 경우 갈 수 있어야함 그런데 안됨 다시 생각해보자...

'APS' 카테고리의 다른 글

BOJ17779 게리맨더링2  (0) 2022.07.24
BOJ14503 로봇청소기  (0) 2022.06.26
BOJ2573 빙산  (0) 2022.06.26
BOJ2468 안전영역  (0) 2022.06.13
BOJ5014 스타트링크  (0) 2022.06.13