내일배움캠프 32일차 TIL _ 7주 3일차

2024. 5. 29. 21:53카테고리 없음

 

  • 오늘 있었던 일
    • 개인과제
    • 알고리즘

SPRIONG

  • 스프링 정리
더보기

숙련 스프링 공부

  •  예외처리 설정하기
  •     private void sendErrorResponse(HttpServletResponse response,
        			int statusCode, String message) throws IOException {
            response.setStatus(statusCode);
            response.setContentType("text/plain");
            response.setCharacterEncoding("UTF-8");
            response.getWriter().write(message);
        }
    해당 코드로 원하는 오류 번호(ex 400) 같이 정할 수 있다.

 

  •  회원 가입시 조건넣기
  •     @Pattern(regexp =  "^[a-z0-9]{4,10}$",
                message = "사용자 이름은 최소 4자 이상, 10자 이하이며 알파벳 소문자(a~z), 숫자(0~9) 입니다")
        private String username;
    
        @Pattern(regexp =  "^[a-zA-Z0-9]{8,15}$",
                message = "사용자 암호는 최소 8자 이상, 15자 이하이며 알파벳 대소문자(a~z, A~Z), 숫자(0~9) 입니다.")
        private String password;
    패턴을 이용해 원하는 형식을 만들 수 있다.

 

 

알고리즘 문제 풀기

     ● 공원 산책

더보기

● 공원 산책 //링크

class Solution {
    public int[] solution(String[] park, String[] routes) {
        

        int h = 0;
        int w = 0;

        String[][] map = new String[park.length][];


        for (int i = 0; i < park.length ; i++) {
            if (park[i].contains( "S" )) {
                h = i;
                w = park[i].indexOf("S");
            }
            map[i] = park[i].split("");
        }

        int mh = h;
        int mw = w;

        for (int i = 0; i < routes.length; i++) {
            String[] move = routes[i].split( " " );
            int v = Integer.parseInt( move[1] );
            for (int j = 0; j < v; j++) {
                if(move[0].equals("N")){
                    h--;
                }else if(move[0].equals("S")){
                    h++;
                }else if(move[0].equals("W")){
                    w--;
                }else if(move[0].equals("E")){
                    w++;
                }
                if(h >= 0 && w >= 0 && map.length > h && map[0].length > w){
                    String zz = map[h][w];
                     if(!zz.equals( "X" )){
                        if(j == (v - 1)){
                            mh = h;
                            mw = w;
                        }
                    }else{
                        h = mh;
                        w = mw;
                        break;
                    }
                }else {
                    h = mh;
                    w = mw;
                    break;
                }

            }



        }

        int[] answer = {mh,mw};
        return answer;
    }
}
  • 첫 시도때 태스트문도 통과했지만 후반 문제가 전부 틀렸다.
    • 문제 지문에
      • 주어진 방향으로 이동할 때 공원을 벗어나는지 확인합니다.
    • 아 넘어가는거.... 
      • 넘어간다고 해서 -1까지 가는 것만 생각하고 초과하는것을 생각하지 못했다.
      • if(h >= 0 && w >= 0)
      • 그래서 초과값까지 넣으니 한방에 통과했다.
      • if(h >= 0 && w >= 0 && map.length > h && map[0].length > w)
  • 밑은 다른 사람의 풀이
  • class Solution {
        public static int[] solution(String[] park, String[] routes) {
            int x = 0;
            int y = 0;
            int[][] arr = {{-1,0},{1,0},{0,-1},{0,1}};
            boolean start = false;
            for(int i=0; i< park.length;i++){
                if(start){
                    break;
                }
                for(int j=0; j<park[i].length();j++){
                    if(park[i].charAt(j) == 'S'){
                        x = i;
                        y = j;
                        start = true;
                        break;
                    }
                }
            }
    
            for (String route : routes) {
                String[] routeArr = route.split(" ");
                String direction = routeArr[0];
                int distance = Integer.parseInt(routeArr[1]);
    
                int index = getDirectionIndex(direction);
    
                if(isWalk(park, x, y, distance, arr[index])){
                    x += distance*arr[index][0];
                    y += distance*arr[index][1];
                }
            }
    
            return new int[]{x,y};
        }
    
        private static boolean isWalk(String[] park, int x, int y, int distance, int[] arr) {
            for(int i = 0; i< distance; i++){
                x+= arr[0];
                y+= arr[1];
    
                if(y<0 || y> park[0].length()-1 || x<0 || x> park.length-1 || park[x].charAt(y)=='X'){
                    return false;
                }
            }
            return true;
        }
    
        private static int getDirectionIndex(String direction) {
            int index = 0;
            switch (direction){
                case "N":
                    break;
                case "S":
                    index = 1;
                    break;
                case "W":
                    index = 2;
                    break;
                case "E":
                    index = 3;
                    break;
            }
            return index;
        }
    }
  • 방식이 다르긴 하지만 거의 비슷하다.

 


당일 회고

  • 왜 이러지, 알고리즘에서도 오류로 시간날려 과제도 2일동안 한거 파일이 깨져서 처음부터 다시해...