01-07 02:28
Recent Posts
Recent Comments
Tags
- Naver Cloud
- ICT๋ฉํ ๋ง
- DATABASE
- python
- ํ๋ก๋ณด๋ ธ
- ํ์ด์ฌ
- JOBํ๊ณ
- appetizer
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- mysql
- Spring
- ICT
- RaspberryPi
- ํ์ด์๊ณต๋ชจ์
- SQL
- DB
- ์๋ฐ
- linux
- ict๊ณต๋ชจ์
- ์ด๋ธ์
- ์๋์ด๋ ธ
- ํ์ด์
- ์จ์ผ๋ํ
- API๋ง์ผํ๋ ์ด์ค
- ์คํฝ์ค๋น
- ์กํ๊ณ
- Java
- ์คํฝ๋ ํ
- API MarketPlace ๊ธ๋ก๋ฒ ์ํฌํฐ์ฆ
- TSQL
- Today
- Total
miinsun
[BAEKJOON] ๋ฐฑ์ค ๊ทธ๋ํ 3190 :: ๋ฑ ๋ณธ๋ฌธ
๐ฌ ๋ฌธ์ ์ค๋ช
'Dummy' ๋ผ๋ ๋์ค๊ฒ์์ด ์๋ค. ์ด ๊ฒ์์๋ ๋ฑ์ด ๋์์ ๊ธฐ์ด๋ค๋๋๋ฐ, ์ฌ๊ณผ๋ฅผ ๋จน์ผ๋ฉด ๋ฑ ๊ธธ์ด๊ฐ ๋์ด๋๋ค. ๋ฑ์ด ์ด๋ฆฌ์ ๋ฆฌ ๊ธฐ์ด๋ค๋๋ค๊ฐ ๋ฒฝ ๋๋ ์๊ธฐ์์ ์ ๋ชธ๊ณผ ๋ถ๋ชํ๋ฉด ๊ฒ์์ด ๋๋๋ค.
๊ฒ์์ NxN ์ ์ฌ๊ฐ ๋ณด๋์์์ ์งํ๋๊ณ , ๋ช๋ช ์นธ์๋ ์ฌ๊ณผ๊ฐ ๋์ฌ์ ธ ์๋ค. ๋ณด๋์ ์ํ์ข์ฐ ๋์ ๋ฒฝ์ด ์๋ค. ๊ฒ์์ด ์์ํ ๋ ๋ฑ์ ๋งจ์ ๋งจ์ข์ธก์ ์์นํ๊ณ ๋ฑ์ ๊ธธ์ด๋ 1 ์ด๋ค. ๋ฑ์ ์ฒ์์ ์ค๋ฅธ์ชฝ์ ํฅํ๋ค.
๋ฑ์ ๋งค ์ด๋ง๋ค ์ด๋์ ํ๋๋ฐ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ฅธ๋ค.
* ๋จผ์ ๋ฑ์ ๋ชธ๊ธธ์ด๋ฅผ ๋๋ ค ๋จธ๋ฆฌ๋ฅผ ๋ค์์นธ์ ์์น์ํจ๋ค.
* ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๊ทธ ์นธ์ ์๋ ์ฌ๊ณผ๊ฐ ์์ด์ง๊ณ ๊ผฌ๋ฆฌ๋ ์์ง์ด์ง ์๋๋ค.
* ๋ง์ฝ ์ด๋ํ ์นธ์ ์ฌ๊ณผ๊ฐ ์๋ค๋ฉด, ๋ชธ๊ธธ์ด๋ฅผ ์ค์ฌ์ ๊ผฌ๋ฆฌ๊ฐ ์์นํ ์นธ์ ๋น์์ค๋ค. ์ฆ, ๋ชธ๊ธธ์ด๋ ๋ณํ์ง ์๋๋ค.
์ฌ๊ณผ์ ์์น์ ๋ฑ์ ์ด๋๊ฒฝ๋ก๊ฐ ์ฃผ์ด์ง ๋ ์ด ๊ฒ์์ด ๋ช ์ด์ ๋๋๋์ง ๊ณ์ฐํ๋ผ.
๐จ ์ ์ถ๋ ฅ ์
์ ๋ ฅ
- ์ฒซ์งธ ์ค์ ๋ณด๋์ ํฌ๊ธฐ N์ด ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 100) ๋ค์ ์ค์ ์ฌ๊ณผ์ ๊ฐ์ K๊ฐ ์ฃผ์ด์ง๋ค. (0 ≤ K ≤ 100)
- ๋ค์ K๊ฐ์ ์ค์๋ ์ฌ๊ณผ์ ์์น๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ฒซ ๋ฒ์งธ ์ ์๋ ํ, ๋ ๋ฒ์งธ ์ ์๋ ์ด ์์น๋ฅผ ์๋ฏธํ๋ค. ์ฌ๊ณผ์ ์์น๋ ๋ชจ๋ ๋ค๋ฅด๋ฉฐ, ๋งจ ์ ๋งจ ์ข์ธก (1ํ 1์ด) ์๋ ์ฌ๊ณผ๊ฐ ์๋ค.
- ๋ค์ ์ค์๋ ๋ฑ์ ๋ฐฉํฅ ๋ณํ ํ์ L ์ด ์ฃผ์ด์ง๋ค. (1 ≤ L ≤ 100)
- ๋ค์ L๊ฐ์ ์ค์๋ ๋ฑ์ ๋ฐฉํฅ ๋ณํ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋๋ฐ, ์ ์ X์ ๋ฌธ์ C๋ก ์ด๋ฃจ์ด์ ธ ์์ผ๋ฉฐ. ๊ฒ์ ์์ ์๊ฐ์ผ๋ก๋ถํฐ X์ด๊ฐ ๋๋ ๋ค์ ์ผ์ชฝ(C๊ฐ 'L') ๋๋ ์ค๋ฅธ์ชฝ(C๊ฐ 'D')๋ก 90๋ ๋ฐฉํฅ์ ํ์ ์ํจ๋ค๋ ๋ป์ด๋ค. X๋ 10,000 ์ดํ์ ์์ ์ ์์ด๋ฉฐ, ๋ฐฉํฅ ์ ํ ์ ๋ณด๋ X๊ฐ ์ฆ๊ฐํ๋ ์์ผ๋ก ์ฃผ์ด์ง๋ค.
์ถ๋ ฅ
- ์ฒซ์งธ ์ค์ ๊ฒ์์ด ๋ช ์ด์ ๋๋๋์ง ์ถ๋ ฅํ๋ค.
์์ ์ ๋ ฅ 1)
6
3
3 4
2 5
5 3
3
3 D
15 L
17 D
์์ ์ถ๋ ฅ 1)
9
์์ ์ ๋ ฅ 2)
10
4
1 2
1 3
1 4
1 5
4
8 D
10 D
11 D
13 L
์์ ์ถ๋ ฅ 2)
21
โ
์์ ์ ๋ ฅ 3)
10
5
1 5
1 3
1 2
1 6
1 7
4
8 D
10 D
11 D
13 L
์์ ์ถ๋ ฅ 3)
13
โ
๐ป Main.java
๋ฌธ์ ์์ฒด๋ ์ด๋ ต์ง ์์์ง๋ง, ์ง์ผ์ผ ํ๋ ์กฐ๊ฑด์ด ๋ง์์ ํธ๋๋ฐ ์๊ฐ์ด ์ค๋๊ฑธ๋ ธ๋ค.. ๊ตฌํ ๋ฌธ์ ๋ ๋๋ฌด ์ง์ค๋ ฅ์ด ๋ง์ด ํ์ํด ใ
๋ฌธ์ ๋ฅผ ๋ณด๋ฉด ์๊ฐ ํด์ผํ ์กฐ๊ฑด์ด ๋ช๊ฐ์ง ์๋ค. ๋จผ์ ์ฌ๊ณผ์ ์์น, ๋ฐฉํฅ ๋ฐ๊พธ๊ธฐ, ๋ฑ์ ์ด๋ ๋ฐฉ๋ฒ ๋ฑ์ ๊ณ ๋ คํด์ ๋ฌธ์ ๋ฅผ ํ์ด๋ดค๋ค
- ๋จผ์ ๊ฐ๊ฐ์ ์ ๋ณด๋ฅผ ์๋ฃํ์ ๋ง๊ฒ ์ ๋ฆฌํ์.
- ๋ฑ์ ์ ๋ณด๋ ์๋ค๋ก ์ ๋์ ์ผ๋ก ๋ฐ๊ฟ ์ ์๋ deque
- ์ฌ๊ณผ ์ ๋ณด๋ ArrayList๋ก
- ๋ฐฉํฅ ์ ๋ณด๋ HashMap<Integer, Character>๋ฅผ ์ด์ฉํ๋ค
- ๋ฐฉํฅ์ ์๊ณ๋ฐฉํฅ์ผ๋ก ์(1), ์ค๋ฅธ์ชฝ(2), ์๋(3), ์ผ์ชฝ(4)๋ก ์ง์
- ๋ฌดํ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ํ์ถ ์กฐ๊ฑด์ ์ค์ ํด ๊ฒ์์ด ๋ช์ด์ ๋๋๋์ง ๊ตฌํ๋ค.
- ํ์ถ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค
- ๋ฑ์ด ์๊ธฐ ๋ชธ์ ๋ถ๋ชํ์ ๋
- ๋ฑ์ด ๋ฒฝ์ ๋ถ๋ชํ์ ๋
- ํ์ถ ์กฐ๊ฑด์ ๋ค์๊ณผ ๊ฐ๋ค
<์ ์ฒด ์ฝ๋>
import java.util.*;
class Point {
int x;
int y;
Point(int x, int y){
this.x = x;
this.y = y;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Point point = (Point) o;
return x == point.x && y == point.y;
}
}
public class Main {
static int n;
static Deque<Point> deque;
static ArrayList<Point> apples;
static HashMap<Integer, Character> dirs;
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
// ๋ณด๋์ ํฌ๊ธฐ
n = sc.nextInt();
// ๋ฑ์ ํํํ ๋ฑ
deque = new LinkedList<>();
deque.add(new Point(1, 1));
// ์ฌ๊ณผ์ ๊ฐ์
int k = sc.nextInt();
apples = new ArrayList<>();
for(int i = 0; i < k; i++) {
apples.add(new Point(sc.nextInt(), sc.nextInt()));
}
// ๋ฐฉํฅ ๋ณํ ์ ๋ณด
int l = sc.nextInt();
dirs = new HashMap<>();
for(int i = 0; i < l; i++){
dirs.put(sc.nextInt(), sc.next().charAt(0));
}
int dir = 2; // ์ฒ์์๋ ์ค๋ฅธ์ชฝ์ผ๋ก ์ง์งํ๊ธฐ ๋๋ฌธ์ ๋ฐฉํฅ ์ ๋ณด 2๋ฅผ ์ค๋ค
int cnt = 0;
while(true){
cnt++;
if(!move(dir))
break;
dir = changeDir(dir, cnt);
}
System.out.println(cnt);
}
static boolean move( int dir){
Point cur = deque.peekFirst();
int nx = cur.x;
int ny = cur.y;
switch (dir){
// ์๋ก ์ด๋
case 1:
nx -= 1;
break;
// ์ค๋ฅธ์ชฝ ์ด๋
case 2:
ny += 1;
break;
// ์๋๋ก ์ด๋
case 3:
nx += 1;
break;
// ์ผ์ชฝ ์ด๋
case 4:
ny -= 1;
break;
}
Point next = new Point(nx, ny);
// ํ์ถ ์กฐ๊ฑด (์๊ธฐ ๋ชธ์ ๋ถ๋ชํ๊ฑฐ๋, ๋ฒฝ์ ๋ถ๋ชํ ๊ฒฝ์ฐ)
if(nx <= 0 || nx > n || ny <= 0 || ny > n || deque.contains(next))
return false;
// ํ์ฌ ์์น์ ์ฌ๊ณผ๊ฐ ์๋์ง ๊ฒ์ฌ
if(apples.contains(next)){ // ์ฌ๊ณผ๊ฐ ์์ผ๋ฉด, ๊ทธ ์นธ์ ์ฌ๊ณผ๋ ์์ด์ง๊ณ ๊ผฌ๋ฆฌ๋ ์์ด์ง์ง ์๋๋ค
deque.offerFirst(next);
apples.remove(next);
}
else{ // ์ฌ๊ณผ๊ฐ ์์ผ๋ฉด ์ด๋
deque.offerFirst(next);
deque.removeLast();
}
return true;
}
// ์๊ณ ์์ผ๋ก ์(1) ์ฐ(2) ํ(3) ์ข(4)
static int changeDir(int dir, int cnt){
if(dirs.containsKey(cnt)){
// ์ผ์ชฝ ํ์
if(dirs.get(cnt) == 'L'){
dir--;
if(dir == 0)
dir = 4;
}
// ์ค๋ฅธ์ชฝ ํ์
else{
dir++;
if(dir == 5)
dir = 1;
}
}
return dir;
}
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BAEKJOON] ๋ฐฑ์ค ๊ตฌํ 14499 :: ์ฃผ์ฌ์ ๊ตด๋ฆฌ๊ธฐ (0) | 2022.07.15 |
---|---|
[BAEKJOON] ๋ฐฑ์ค BFS 14497 :: ์ฃผ๋์ ๋ (0) | 2022.07.09 |
[BAEKJOON] ๋ฐฑ์ค BFS 12851 :: ์จ๋ฐ๊ผญ์ง 2 (0) | 2022.07.08 |
[BAEKJOON] ๋ฐฑ์ค BFS 2636 :: ์น์ฆ (0) | 2022.06.15 |
[BAEKJOON] ๋ฐฑ์ค BFS 2589 :: ๋ณด๋ฌผ์ฌ (0) | 2022.06.15 |
Comments