반응형
https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc
SW Expert Academy
SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!
swexpertacademy.com
만들어야 할 메소드가 많았지만 어려운 문제는 아니었다.
내 코드
메모리 : 21136 KB
시간 : 125 ms
코드길이 : 4357 B
[내 코드]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class Solution {
static char[][] map;
static int N;
static int H;
static int W;
static String order;
static int spotRow;
static int spotColumn;
static int nowDir;
//상, 하, 좌, 우
static int[] direction = {-1, 1, -1, 1};
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringBuilder sb = new StringBuilder();
StringTokenizer st;
int T = Integer.parseInt(br.readLine());
for(int t = 1; t <= T; t++) {
sb.append('#').append(t).append(' ');
st = new StringTokenizer(br.readLine());
H = Integer.parseInt(st.nextToken());
W = Integer.parseInt(st.nextToken());
map = new char[H][W];
for(int h = 0; h < H; h++) {
String row = br.readLine();
for(int w = 0; w < W; w++) {
map[h][w] = row.charAt(w);
if(map[h][w] == '<' || map[h][w] == '>' || map[h][w] == '^' || map[h][w] == 'v') {
switch(map[h][w]) {
case '^':
nowDir = 0;
break;
case 'v':
nowDir = 1;
break;
case '<':
nowDir = 2;
break;
case '>':
nowDir = 3;
break;
}
spotRow = h;
spotColumn = w;
}
}
}
N = Integer.parseInt(br.readLine());
order = br.readLine();
game();
for(int h = 0; h < H; h++) {
for(int w = 0; w < W; w++) {
sb.append(map[h][w]);
}
sb.append('\n');
}
}
System.out.print(sb);
}
public static void game() {
for(int n = 0; n < N; n++) {
switch(order.charAt(n)) {
case 'U':
Up();
break;
case 'D':
Down();
break;
case 'L':
Left();
break;
case 'R':
Right();
break;
case 'S':
Shoot();
break;
}
}
}
public static void Up() {
nowDir = 0;
map[spotRow][spotColumn] = '^';
if(spotRow - 1 < 0)
return;
if(map[spotRow - 1][spotColumn] == '.') {
change(spotRow, spotColumn, spotRow - 1, spotColumn);
spotRow -= 1;
}
return;
}
public static void Down() {
nowDir = 1;
map[spotRow][spotColumn] = 'v';
if(spotRow + 1 == H)
return;
if(map[spotRow + 1][spotColumn] == '.') {
change(spotRow, spotColumn, spotRow + 1, spotColumn);
spotRow += 1;
}
return;
}
public static void Left() {
nowDir = 2;
map[spotRow][spotColumn] = '<';
if(spotColumn - 1 < 0)
return;
if(map[spotRow][spotColumn - 1] == '.') {
change(spotRow, spotColumn, spotRow, spotColumn - 1);
spotColumn -= 1;
}
return;
}
public static void Right() {
nowDir = 3;
map[spotRow][spotColumn] = '>';
if(spotColumn + 1 == W)
return;
if(map[spotRow][spotColumn + 1] == '.') {
change(spotRow, spotColumn, spotRow, spotColumn + 1);
spotColumn += 1;
}
return;
}
public static void Shoot() {
int nowRow = spotRow;
int nowColumn = spotColumn;
switch(nowDir) {
//위
case 0:
while(true) {
nowRow += direction[nowDir];
if(nowRow < 0)
break;
//벽돌벽이면
if(map[nowRow][spotColumn] == '*') {
map[nowRow][spotColumn] = '.';
break;
}
//강철벽이면
if(map[nowRow][spotColumn] == '#')
break;
}
break;
//아래
case 1:
while(true) {
nowRow += direction[nowDir];
if(nowRow == H)
break;
//벽돌벽이면
if(map[nowRow][spotColumn] == '*') {
map[nowRow][spotColumn] = '.';
break;
}
//강철벽이면
if(map[nowRow][spotColumn] == '#')
break;
}
break;
//좌
case 2:
while(true) {
nowColumn += direction[nowDir];
if(nowColumn < 0)
break;
if(map[spotRow][nowColumn] == '*') {
map[spotRow][nowColumn] = '.';
break;
}
if(map[spotRow][nowColumn] == '#')
break;
}
break;
//우
case 3:
while(true) {
nowColumn += direction[nowDir];
if(nowColumn == W)
break;
if(map[spotRow][nowColumn] == '*') {
map[spotRow][nowColumn] = '.';
break;
}
if(map[spotRow][nowColumn] == '#')
break;
}
break;
}
return;
}
public static void change(int nowR, int nowC, int nextR, int nextC) {
char temp = map[nextR][nextC];
map[nextR][nextC] = map[nowR][nowC];
map[nowR][nowC] = temp;
return;
}
}
반응형
'SSAFY > SWEA' 카테고리의 다른 글
[SWEA] 9229 : 한빈이와 spot Mart (0) | 2023.05.02 |
---|---|
[SWEA] 5607 : 조합 (풀이중) (0) | 2023.05.02 |
[SWEA] 6190 : 정곤이의 단조 증가하는 수 (0) | 2023.05.01 |
[SWEA] 2814 : 최장경로 (0) | 2023.05.01 |
[SWEA] 2805 : 농작물 수확하기 (0) | 2023.04.30 |