```
백준 25165번 영리한 아리의 포탈 타기 JAVA 구현해보기
```

이번 글을 통해 배워갈 내용
- 백준 25165번 풀이
https://www.acmicpc.net/problem/25165
25165번: 영리한 아리의 포탈 타기
아리가 보스 몬스터를 잡으러 가려면 광야에 위치한 포탈을 타야만 한다. 하지만 광야에는 아리가 포탈을 타러 가는 것을 방해하려는 보스 몬스터의 오른팔인 부하 몬스터 한 마리도 함께 위치
www.acmicpc.net
백준 25165번 영리한 아리의 포탈 타기는
난이도 브론즈 등급의 문제로서
(N, M) 크기의 최상단 왼쪽 모서리 칸이 (1,1)이라 가정하고
(N, M) 칸에 포탈이 위치하며
용사가 (1, Ac) 칸에 있고
몬스터가 (Sr, Sc) 칸에 있으며
용사가 왼쪽이나 오른쪽 방향으로 움직이며
열의 양측 끝에 가면 아래 행에서 방향을 반대 방향으로 전환해서 왼쪽이나 오른쪽으로 움직일 때
용사가 포털에 도착하기 전에 몬스터를 만나는지 확인해주는 문제입니다.
조건
(2 ≤ N, M ≤ 100)
(1 ≤ Ac ≤ M)
Sr (2 ≤ Sr ≤ N), Sc (1 ≤ Sc ≤ M)
0이면 왼쪽 1이면 오른쪽
30분 정도 위에 링크를 방문하셔서 풀어보시고
안 풀리시는 경우에만 아래 해답을 봐주시면 감사하겠습니다.
// 1. 몬스터가 아리 행 보다 높은 행에 있는 경우
// 2. 몬스터가 아리 행과 같은 행에 있는 경우
// 3. 몬스터가 아리 행보다 낮은 곳에 있는 경우
로 크게 3가지 조건에 맞춰서 분기를 했으며
3. 몬스터가 아리 행보다 낮은 곳에 있는 경우에는
if (((wRow - aRow) % 2) == 1){isRight =! isRight;}
을 사용해서 마지막 행일 때 용사의 방향을 찾은 다음
용사가 포털에 먼저 도달하는지 몬스터와 먼저 만나는지 확인했습니다.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main {
static final BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
public static void main(String[] args) throws IOException {
final String input01 = br.readLine();
final String input02 = br.readLine();
final String input03 = br.readLine();
System.out.print(solve(input01, input02, input03));
}
private static String solve(String input01, String input02, String input03) {
String[] inputArr01 = input01.split(" ");
String[] inputArr02 = input02.split(" ");
String[] inputArr03 = input03.split(" ");
// wilderness size row col
final int wRow = Integer.parseInt(inputArr01[0]);
final int wCol = Integer.parseInt(inputArr01[1]);
// ari position row col
final int aRow = 1;
final int aCol = Integer.parseInt(inputArr02[0]);
boolean isRight = Integer.parseInt(inputArr02[1]) != 0;
// monster position row col
final int mRow = Integer.parseInt(inputArr03[0]);
final int mCol = Integer.parseInt(inputArr03[1]);
String retVal = "NO...";
// 1. 몬스터가 아리 행 보다 높은 행에 있는 경우
if (mRow < aRow) {
retVal = "YES!";
}
// 2. 몬스터가 아리 행과 같은 행에 있는 경우
else if (mRow == aRow) {
if (isRight) {
if (mCol < aCol) {
retVal = "YES!";
}
} else {
if (mCol > aCol) {
retVal = "YES!";
}
}
}
// 3. 몬스터가 아리 행보다 낮은 곳에 있는 경우
else {
if (mRow == wRow){
if (((wRow - aRow) % 2) == 1){
isRight = !isRight;
}
if (isRight) {
if (wCol < mCol) {
retVal = "YES!";
}
} else {
if (wCol > mCol) {
retVal = "YES!";
}
}
}
}
// return value
return retVal;
}
}
//codemasterkimc.tistory.com [김씨의 코딩 스토리]
읽어주셔서 감사합니다
무엇인가 얻어가셨기를 바라며
오늘도 즐거운 코딩 하시길 바랍니다 ~ :)
'Java > Java 알고리즘' 카테고리의 다른 글
| 백준 25053번 Organizing SWERC JAVA 구현해보기 (1) | 2022.05.28 |
|---|---|
| 백준 25183번 인생은 한 방 JAVA 구현해보기 (0) | 2022.05.28 |
| 백준 25191번 치킨댄스를 추는 곰곰이를 본 임스 JAVA 구현해보기 (0) | 2022.05.25 |
| 백준 25166번 배고픈 아리의 샌드위치 구매하기 JAVA 구현해보기 (0) | 2022.05.24 |
| 백준 25177번 서강의 역사를 찾아서 JAVA 구현해보기 (0) | 2022.05.22 |