본 글은 다크모드에 최적화되어 있습니다. 문제 링크 Problem keymap에는 자판기에 존재하는 문자들로 구성된 문자열이 주어지고 targets에는 입력하고자 하는 문자들로 구성된 문자열이 주어진다. targets에 저장된 문자들이 자판기에 존재하는지 확인하면 되는 문제이다 Approach keymap 배열에 저장된 값을 하나씩 꺼내어 아래의 과정을 거친다. 이미 map에 저장된 문자인지 확인한다. 존재하지 않는다면 key:문자, value:문자의 위치를 저장한다. 존재한다면 key:문자, value: 기존의 값과 현재 문자의 위치를 비교하여 더 작은 값을 저장 // j + 1인 이유는 키를 1번 이상 눌러야 하기 때문이다. if(!map.containsKey(word)) map.put(word, j..
문제 링크 Problem 두 개의 문자열에서 공통되는 문자를 뽑아 내림차순으로 정렬해서 출력하는 문제이다. 주의해야 할 점은 문자열이 '0'으로만 '0'을 출력해야 하고, 공통되는 문자가 없다면 '-1'을 출력해야 한다. Approach Map의 key:value 특징을 활용하여 풀었다. map 변수 : 더 긴 문자열의 문자 개수를 저장하는 map store 변수 : 공통되는 문자 개수를 저장하는 map 먼저, 두 문자열 중에서 더 긴 문자열을 찾고 map 변수에 저장한다. 긴 문자열에서 0~9 사이의 정수가 몇 번 나왔는지 map 변수에 저장한다. X의 길이 < Y의 길이 for (int i = 0; i < Y.length(); i++) { int num = Y.charAt(i) - '0'; map.p..
문제 링크 Problem 시작 지점으로부터 동, 서, 남, 북 방향으로 이동할 수 있는지에 관한 문제이다. 지나가는 중에 'X'를 만나거나 또는 제한된 범위를 벗어나면 해당 방향으로 이동할 수 없다. Approach 1칸씩 이동할 때마다 조건식을 걸어 지나갈 수 있는지 없는지 확인하면 된다. 체크해야 할 조건 : 범위를 벗어나는 위치인가? if(tmpX > w || tmpY > h || tmpX < 0 || tmpY < 0) return; 지나갈 수 없는('X')인 위치인가? if(park[tmpY].charAt(tmpX) == 'X') return; 위의 조건 중 하나라도 만족한다면 요청을 수행하기 전 원위치로 복귀해야 한다. go 메서드를 보면 임시로 사용할 tmpX, tmpY 변수를 선언했다. fo..
본 글은 다크모드에 최적화되어 있습니다. 스프링에서는 form을 통해 전달받은 값에 대하여 값을 검증하는 기능과 API JSON 요청을 통해 전달받은 값에 대하여 검증을 수행할 수 있다. 설명에 들어가기 앞서 결론은 다음과 같다. form으로 전송한 값을 @ModelAttribute를 통해 받으면 특정 필드가 바인딩에 실패해도 검증을 수행한다. API JSON 통신으로 전송한 값을 @RequestBody를 통해 받으면 필드 바인딩에 실패하면 검증 자체를 수행하지 않는다. 본 글은 @ModelAttribute와 @RequestBody 애너테이션 설명 글이 아니므로 간단하게만 설명하낟. @ModelAttirbute : Http 요청으로 전송한 값을 Controller에서 필드로 받을 필요 없이 객체로 바로 ..
서버는 클라이언트의 각각 다른 요청에 대하여 다른 방식으로 처리할 수 있으며, 클라이언트는 서버에서 반환해주는 데이터를 제한하여 받을 수 있다. 그것을 가능하게 해주는 것이 바로 consumes와 produces이다. consumes : Content-type헤더, 서버에서 클라이언트의 요청을 제한적으로 받아들인다. produces : Accept 헤더, 클라이언트는 서버가 반환하는 데이터를 제한적으로 받아들인다. Spring에서는 클라이언트의 요청을 제한적으로 처리할 수 있는 다음의 기능을 제공한다. // consumes = "처리 가능한 Media Type" @GetMapping(value = "/mapping-test", consumes = "text/plain") 위와 같이 사용하면 클라이언트의 ..