[알고리즘] 상호의 배틀필드

2024. 2. 15. 16:31알고리즘 풀이/Java

https://swexpertacademy.com/main/code/problem/problemDetail.do?contestProbId=AV5LyE7KD2ADFAXc

 

SW Expert Academy

SW 프로그래밍 역량 강화에 도움이 되는 다양한 학습 컨텐츠를 확인하세요!

swexpertacademy.com

import java.awt.Point;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Solution {
	
	static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws Exception {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st;
		int T = Integer.parseInt(br.readLine());
		for (int testCase = 1; testCase <= T; testCase++) {
			st = new StringTokenizer(br.readLine());
			int H = Integer.parseInt(st.nextToken());
			int W = Integer.parseInt(st.nextToken());
			
			char[][] map = new char[H][W];
			Point startPoint = null;
			for (int i = 0; i < H; i++) {
				String line = br.readLine();
				for (int j = 0; j < W; j++) {
					map[i][j] = line.charAt(j);
					if (map[i][j] == '<' || map[i][j] == '^' 
							|| map[i][j] == 'v' || map[i][j] == '>') {
						startPoint = new Point(i, j);
					}
				}
			}
			
			int N = Integer.parseInt(br.readLine());
			char[] commands = br.readLine().toCharArray();
			
			Point curPoint = startPoint;
			for (char command : commands) {
				int row = curPoint.x;
				int col = curPoint.y;
				int nrow;
				int ncol;
				switch (command) {
				case 'U':
					nrow = row - 1;
					if (0 <= nrow && map[nrow][col] == '.') {
						map[row][col] = '.';
						map[nrow][col] = '^';
						curPoint.x = nrow;
					} else {
						map[row][col] = '^';
					}
					break;
				case 'D':
					nrow = row + 1;
					if (nrow < H && map[nrow][col] == '.') {
						map[row][col] = '.';
						map[nrow][col] = 'v';
						curPoint.x = nrow;
					} else {
						map[row][col] = 'v';
					}
					break;
				case 'L':
					ncol = col - 1;
					if (0 <= ncol && map[row][ncol] == '.') {
						map[row][col] = '.';
						map[row][ncol] = '<';
						curPoint.y = ncol;
					} else {
						map[row][col] = '<';
					}
					break;
				case 'R':
					ncol = col + 1;
					if (ncol < W && map[row][ncol] == '.') {
						map[row][col] = '.';
						map[row][ncol] = '>';
						curPoint.y = ncol;
					} else {
						map[row][col] = '>';
					}
					break;
				case 'S':
					int dx = 0;
					int dy = 0;
					switch (map[row][col]) {
					case '>':
						dx = 0;
						dy = 1;
						break;
					case '<':
						dx = 0;
						dy = -1;
						break;
					case '^':
						dx = -1;
						dy = 0;
						break;
					case 'v':
						dx = 1;
						dy = 0;
						break;
					}
					int x = row;
					int y = col;
					int nx = x + dx;
					int ny = y + dy;
					while (true) {
						if (!(0 <= nx && nx < H && 0 <= ny && ny < W)) {
							break;
						}
						if (map[nx][ny] == '*') {
							map[nx][ny] = '.';
							break;
						} else if (map[nx][ny] == '#') {
							break;
						}
						nx += dx;
						ny += dy;
					}
					break;
				}
			}
			
			sb.append("#").append(testCase).append(" ");
			for (int i = 0; i < H; i++) {
				for (int j = 0; j < W; j++) {
					sb.append(map[i][j]);
				}
				sb.append("\n");
			}
			
		}
		System.out.println(sb);
	}
}

나의 풀이

- 생구현하면 된다.

- 다행히 한번에 됐다.

'알고리즘 풀이 > Java' 카테고리의 다른 글

[알고리즘] 무선 충전  (0) 2024.02.15
[알고리즘] 최적 경로  (0) 2024.02.15
[알고리즘][X] 월드컵  (0) 2024.02.15
[알고리즘] 빵집  (1) 2024.02.14
[알고리즘][X] Z  (1) 2024.02.14