👩💻 SWEA 1873商号の戦区
31995 ワード
💬 これは簡単なシミュレーション問題です.メモリ過剰の問題を解決するのに時間がかかりました.
の指紋で表現したいです. によって送信された部分は、 しかし、メモリオーバーフローが発生しました.移動時に処理される各ifゲートには、不要な検査を回避するための範囲の条件がある.
- if (start_i + 1 < row && field[start_i + start_d][start_j] == '.')
問題ごとにメモリが過剰になります.
💡 解答方法
상/하
좌/우
に分割されて反復される.- if (start_i + 1 < row && field[start_i + start_d][start_j] == '.')
🔥 コード#コード#
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
public class SWEA_1873_상호의배틀필드 {
public static void main(String[] args) throws NumberFormatException, IOException {
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int T = 1; T <= t; T++) {
StringTokenizer st = new StringTokenizer(br.readLine());
int row = Integer.parseInt(st.nextToken());
int col = Integer.parseInt(st.nextToken());
char field[][] = new char[row][col];
int start_i = 0;
int start_j = 0;
int start_d = 0;
int start_n = 0; // 타입
for (int i = 0; i < row; i++) {
String s = br.readLine();
for (int j = 0; j < col; j++) {
field[i][j] = s.charAt(j);
if (s.charAt(j) == '^') {
start_i = i;
start_j = j;
start_d = -1;
start_n = 1;
}
if (s.charAt(j) == 'v') {
start_i = i;
start_j = j;
start_d = 1;
start_n = 1;
}
if (s.charAt(j) == '<') {
start_i = i;
start_j = j;
start_d = -1;
start_n = 2;
}
if (s.charAt(j) == '>') {
start_i = i;
start_j = j;
start_d = 1;
start_n = 2;
}
}
}
int num = Integer.parseInt(br.readLine());
String attack = br.readLine();
for (int i = 0; i < num; i++) {
if (attack.charAt(i) == 'S') {
int nx = start_i;
int ny = start_j;
switch (start_n) {
case 1:
while (true) {
nx += start_d;
if (nx < 0 || nx >= row)
break;
if (field[nx][start_j] == '#') {
break;
}
if (field[nx][start_j] == '*') {
field[nx][start_j] = '.';
break;
}
}
break;
case 2:
while (true) {
ny += start_d;
if (ny < 0 || ny >= col)
break;
if (field[start_i][ny] == '#') {
break;
}
if (field[start_i][ny] == '*') {
field[start_i][ny] = '.';
break;
}
}
break;
}
}
if (attack.charAt(i) == 'U') {
start_d = -1;
start_n = 1;
field[start_i][start_j] = '^';
if (start_i - 1 >= 0 && field[start_i + start_d][start_j] == '.') {
field[start_i + start_d][start_j] = field[start_i][start_j];
field[start_i][start_j] = '.';
start_i += start_d;
}
}
if (attack.charAt(i) == 'D') {
start_d = 1;
start_n = 1;
field[start_i][start_j] = 'v';
if (start_i + 1 < row && field[start_i + start_d][start_j] == '.') {
field[start_i + start_d][start_j] = field[start_i][start_j];
field[start_i][start_j] = '.';
start_i += start_d;
}
}
if (attack.charAt(i) == 'L') {
start_d = -1;
start_n = 2;
field[start_i][start_j] = '<';
if (start_j - 1 >= 0 && field[start_i][start_j + start_d] == '.') {
field[start_i][start_j + start_d] = field[start_i][start_j];
field[start_i][start_j] = '.';
start_j += start_d;
}
}
if (attack.charAt(i) == 'R') {
start_d = 1;
start_n = 2;
field[start_i][start_j] = '>';
if (start_j + 1 < col && field[start_i][start_j + start_d] == '.') {
field[start_i][start_j + start_d] = field[start_i][start_j];
field[start_i][start_j] = '.';
start_j += start_d;
}
}
}
System.out.print("#" + T + " ");
for (int i = 0; i < row; i++) {
for (int j = 0; j < col; j++) {
System.out.print(field[i][j]);
}
System.out.println();
}
}
}
}
🤔 に感銘を与える
問題ごとに
Reference
この問題について(👩💻 SWEA 1873商号の戦区), 我々は、より多くの情報をここで見つけました https://velog.io/@hyemz/SWEA1873テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol