반응형
🔺 문제
🔺 코드
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
|
import java.util.*;
import java.io.*;
public class Main {
static int[] dx = {0,1,0,-1}; // 북동남서 (시계 방향)
static int[] dy = {1,0,-1,0};
static int N, T, total = 0;
static int[][] map;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine()," ");
// 입력 받기
N = Integer.parseInt(st.nextToken());
T = Integer.parseInt(st.nextToken());
char[] arr = br.readLine().toCharArray();
map = new int[N][N];
for(int i = 0 ; i < N ; i++) {
st = new StringTokenizer(br.readLine()," ");
for(int j = 0 ; j < N ; j++) {
map[i][j] = Integer.parseInt(st.nextToken());
}
}
int[] now = new int[]{N/2, N/2};
total = map[now[0]][now[1]]; // 시작점도 더해야 하니까
int dir = 3; // 북쪽에서 시작
// 이동하기
for(int i = 0 ; i < arr.length ; i++) {
if(arr[i] == 'L') { // 왼쪽으로 회전
dir = (dir - 1 + 4) % 4;
}
else if(arr[i] == 'R') { // 오른쪽으로 회전
dir = (dir + 1) % 4;
}
else { // 앞으로 전진
if(inRange(now[0] + dx[dir], now[1] + dy[dir])) {
now[0] += dx[dir];
now[1] += dy[dir];
total += map[now[0]][now[1]];
}
}
}
// 결과 출력하기
System.out.println(total);
}
// 범위 확인 메소드
private static boolean inRange(int x, int y) {
if(x < 0 || x >= N || y < 0 || y >= N)
return false;
return true;
}
}
|
cs |
🧩 해결 아이디어
• 시뮬레이션
- int[]형 배열 dx,dy를 시계 방향 순으로 작성한다.
- 방향은 북쪽에서 시작한다.
- L : 왼쪽으로 회전한다면, 현재 방향값 - 1 한 값을 조정하기 위해 +4를 하고 %4를 해 범위 내의 인덱스를 갖고 오도록 한다.
- R : 오른쪽으로 회전한다면, 현재 방향값 + 1한다.
- F : 앞으로 전진한다면, 이동한 칸의 값이 정사각형 범위 내에 있어야만 이동할 수 있다. 이동하고 나서는, 현재 위치와 총합을 업데이트한다.
💬 느낀 점
이제 회전하고 이동까지 가게 하는 걸 해봐야겠구나.....
1회독 | 2회독 | 3회독 | 4회독 | 5회독 |
V |
(참고)
반응형
'코테 > 코드트리' 카테고리의 다른 글
[코드트리/NOVICE MID] 숫자들의 합 중 최대 (JAVA) (0) | 2023.10.26 |
---|---|
[코드트리/NOVICE MID] 구간 중 최대 합 (JAVA) (0) | 2023.10.26 |
[코드트리/NOVICE MID] T를 초과하는 연속 부분 수열 (JAVA) (0) | 2023.10.26 |
[코드트리/NOVICE MID] 연속되는 수 4 (JAVA) (0) | 2023.10.26 |
[코드트리/NOVICE MID] 연속되는 수 3 (JAVA) (0) | 2023.10.26 |