SWEA(SW Expert Academy) 1873. 상호의 배틀필드 D3

heesan·2024년 10월 6일

코딩테스트

목록 보기
3/40

● 문제출처

https://swexpertacademy.com/main/code/problem/problemDetail.do?problemLevel=3&problemLevel=4&contestProbId=AV5LyE7KD2ADFAXc&categoryId=AV5LyE7KD2ADFAXc&categoryType=CODE&problemTitle=&orderBy=INQUERY_COUNT&selectCodeLang=ALL&select-1=4&pageSize=10&pageIndex=3

●정리(요약)

너무 많아서 생략...

●코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;
class Solution
{   
    static String [][] map;
    static int [] Now;
    static int H,W;
    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 i = 1; i<=T; i++) {
            st= new StringTokenizer(br.readLine());
            H = Integer.parseInt(st.nextToken());
            W = Integer.parseInt(st.nextToken());
             
            map = new String[H][W];
             
            //0 :세로 1: 가로
            Now = new int[2]; 
             
            for(int j=0; j<H;j++) {
                String str = br.readLine();
                 
                // 현위치 찾기
                if(str.contains("^")) {
                    Now[0]=j;
                    Now[1]=str.indexOf("^");
                }else if(str.contains("v")) {
                    Now[0]=j;
                    Now[1]=str.indexOf("v");
                }else if(str.contains("<")) {
                    Now[0]=j;
                    Now[1]=str.indexOf("<");
                }else if(str.contains(">")) {
                    Now[0]=j;
                    Now[1]=str.indexOf(">");
                }
                 
                map[j] = str.split("");
            }
             
            int N = Integer.parseInt(br.readLine());
            String []howDo = br.readLine().split("");
             
            for(int j=0; j<howDo.length; j++) {
                if(howDo[j].equals("S")){
                    shoot();
//                  System.out.println(howDo[j]+" "+Now[0]+" "+Now[1]);
//                  for(int e=0; e<H;e++) {
//                      for(int k=0; k<W; k++) {
//                          System.out.print(map[e][k]);
//                      }
//                      System.out.print("\n");
//                  }
//                  System.out.print("\n");
                    continue;
                }
                move(howDo[j]);
                 
//              System.out.println(howDo[j]+" "+Now[0]+" "+Now[1]);
//              for(int e=0; e<H;e++) {
//                  for(int k=0; k<W; k++) {
//                      System.out.print(map[e][k]);
//                  }
//                  System.out.print("\n");
//              }
//              System.out.print("\n");
            }
             
            sb.append("#").append(i).append(" ");
         
            for(int j=0; j<H;j++) {
                for(int k=0; k<W; k++) {
                    sb.append(map[j][k]);
                }
                sb.append("\n");
            }
        }
        System.out.println(sb.toString());
    }
     
     
     public static void move(String command) {
         switch (command) {
         case "U":
             if (Now[0] - 1 >= 0 && map[Now[0] - 1][Now[1]].equals(".")) {
                 map[Now[0]][Now[1]] = ".";
                 map[Now[0] - 1][Now[1]] = "^";
                 Now[0] = Now[0] - 1;
             } else {
                 map[Now[0]][Now[1]] = "^";
             }
             break;
         case "D":
             if (Now[0] + 1 < H && map[Now[0] + 1][Now[1]].equals(".")) {
                 map[Now[0]][Now[1]] = ".";
                 map[Now[0] + 1][Now[1]] = "v";
                 Now[0] = Now[0] + 1;
             } else {
                 map[Now[0]][Now[1]] = "v";
             }
             break;
         case "L":
             if (Now[1] - 1 >= 0 && map[Now[0]][Now[1] - 1].equals(".")) {
                 map[Now[0]][Now[1]] = ".";
                 map[Now[0]][Now[1] - 1] = "<";
                 Now[1] = Now[1] - 1;
             } else {
                 map[Now[0]][Now[1]] = "<";
             }
             break;
         case "R":
             if (Now[1] + 1 < W && map[Now[0]][Now[1] + 1].equals(".")) {
                 map[Now[0]][Now[1]] = ".";
                 map[Now[0]][Now[1] + 1] = ">";
                 Now[1] = Now[1] + 1;
             } else {
                 map[Now[0]][Now[1]] = ">";
             }
             break;
     }
     }
     
    public static void shoot() {
        if(map[Now[0]][Now[1]].equals("^")) {
            int tmpUp = Now[0]-1;
            while(tmpUp>=0) {
                if(map[tmpUp][Now[1]].equals("#")) {
                    break;
                }else if(map[tmpUp][Now[1]].equals("*")){
                    map[tmpUp][Now[1]]=".";
                    break;
                }
                tmpUp--;
            }
        }
        if(map[Now[0]][Now[1]].equals("v")) {
            int tmpDown = Now[0]+1;
            while(tmpDown<H) {
                if(map[tmpDown][Now[1]].equals("#")) {
                    break;
                }else if(map[tmpDown][Now[1]].equals("*")){
                    map[tmpDown][Now[1]]=".";
                    break;
                }
                tmpDown++;
            }
        }
        if(map[Now[0]][Now[1]].equals("<")) {
            int tmpLeft = Now[1]-1;
            while(tmpLeft>=0) {
                if(map[Now[0]][tmpLeft].equals("#")) {
                    break;
                }else if(map[Now[0]][tmpLeft].equals("*")){
                    map[Now[0]][tmpLeft]=".";
                    break;
                }
                tmpLeft--;
            }
        }
        if(map[Now[0]][Now[1]].equals(">")) {
            int tmpRigth = Now[1]+1;
            while(tmpRigth<W) {
                if(map[Now[0]][tmpRigth].equals("#")) {
                    break;
                }else if(map[Now[0]][tmpRigth].equals("*")){
                    map[Now[0]][tmpRigth]=".";
                    break;
                }
                tmpRigth++;
            }
        }
    }
 
}

● 느낀점

너무 작은 실수가 많아 너무 오래 걸렸다....

profile
👩‍💻Backend Engineering

0개의 댓글