내일배움캠프 32일차 TIL _ 7주 3일차
2024. 5. 29. 21:53ㆍ카테고리 없음
- 오늘 있었던 일
- 개인과제
- 알고리즘
SPRIONG
- 스프링 정리
더보기
숙련 스프링 공부
- 예외처리 설정하기
-
해당 코드로 원하는 오류 번호(ex 400) 같이 정할 수 있다.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); }
- 회원 가입시 조건넣기
-
패턴을 이용해 원하는 형식을 만들 수 있다.@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일동안 한거 파일이 깨져서 처음부터 다시해...