목록전체 글 (73)
delpho
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cPH6pE/btsGwhAXjwl/TxBt6vPGGdHzUkogaBBNAk/img.png)
Think 문제를 처음 읽고나서 생각한 풀이는, 섬 가장자리 위치를 큐에 모두 저장하고, BFS를 한번에 돌리면 되겠다고 생각했다. 하지만, 가장자리 포인트들에서 동시에 BFS가 돌아가다보니, 거리가 상쇄가 되어버렸다. (거리가 4라면 2로 되어버림) 어떻게 풀지 계속 고민하다가 구글링을 했다. (https://todaycode.tistory.com/166) 풀이 방식은 이렇다. 각 섬들을 넘버링한다. (다른 섬의 경계에 도착했는지 체크하기 위함, 1로만 되어있는 섬 표식을 2,3,4로 표시 (2부터 넘버링하는게 더 편함)) 2중 for문을 돌면서 BFS를 시도한다. map[nextR][nextC] ≠ 0 이면, 섬 가장자리가 아니라는 의미이기 때문에 BFS를 진행하지 않는다. (다른 if문으로 인해 자..
Think 물고기를 어떤 자료구조로 관리할지, 상어기준으로 물고기와의 거리를 어떻게 계산할지, 먹는 우선순위를 어떻게 구분할지에 대해서 먼저 고민하고 시작했다. 물고기는 Fish라는 클래스를 만들고 LinkedList로 관리 / 상어와 물고기와의 거리는 BFS를 통해 계산 (한번 먹을때마다 다시 계산) / 우선순위는 Fish 클래스에 Comparable을 통해 정렬시키기 - 를 통해 구현했다 물고기 먹는 순서와 상어가 갇혔을때의 경우를 고려하지못해서 약간 정체됐지만, 그래도 풀었다. 188ms로 통과했길래 다른 사람은 얼마나 걸렸는지 봤는데 84ms로 통과한 사람이 있어서 풀이를 구경했다. 나는 상어가 물고기를 먹을때마다 물고기와의 거리를 계속 BFS를 통해 계산했는데, 이 사람은 BFS 한번만으로 풀어..
Think 처음에는 벽 위치를 저장해두고, 하나씩 벽을 없애면서 모든 경우의 수를 dfs 했다. 그런데… 알고보니 시간복잡도가 NM^2였다. https://kscodebase.tistory.com/66를 참고했다. int[][][] isVisited를 활용하여, 벽을 뿌신 경우와 안뿌신 경우를 구분해서 관리할 수 있었다. DFS는 가중치가 없을 경우(다익스트라를 사용하지않아도 되는 경우), 무조건 최단거리를 보장한다. 또한, Queue 특성상, 벽을 뚫고 가는 경우와 안뚫고 돌아가는 경우 모두 체크가 가능하다 이 개념이 이 문제를 푸는 아이디어를 이해하는데에 중요한 포인트라고 생각한다 왜냐면…. 벽을 안 부수고도 현재 칸까지 도달이 가능하지만, 벽을 부수고 오는 것이 더 짧다고 가정해봅시다. 현재 지점에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/Cnz0M/btsGq1SLnYq/qqUXWBpcXs4S1Hs1fqAr6k/img.png)
1. MVC Pattern 등장 배경 MVC 패턴은 JSP의 등장 이후 제안된 패턴이 아니라, 1970년대 후반에 제안된 패턴입니다. Smalltalk 언어를 고도화하는데에 사용되었다고 알고 있습니다. (이전 포스팅 참고) 프레젠테이션 로직과 비즈니스 로직이 분리되어있지 않은 Servlet의 단점을 해결하기 위해 JSP가 등장하였고, 이 JSP를 더욱 효과적으로 사용하기 위해 MVC 패턴을 적용하기 시작했습니다. [ Servlet과 JSP ] Servlet 코드 @WebServlet(name = "memberSaveServlet", urlPatterns = "/servlet/members/save") public class MemberSaveServlet extends HttpServlet { priva..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/lxt9V/btsGmy3P64b/RPvyqZ1ty5z0w2pctGQkak/img.png)
[ 0. 들어가기 전 ] Servlet 등장 이후 JSP 라는 기술이 추가로 등장하게 되었는데, 관련해서 내용을 정리해보았습니다. [ 1. JSP의 등장 배경 ] 서블릿의 등장으로, CGI 프로그래밍의 한계를 개선했지만, 또다른 단점이 존재하였습니다. Servlet을 통해 HTTP 요청을 처리하고 동적 컨텐츠를 생성 후 응답으로 반환해주어야하는데, 프레젠테이션 로직(ex. HTML 코드)과 비즈니스 로직이 혼합되어 코드관리가 어려웠습니다. 서블릿의 복잡성: 초기 웹 애플리케이션 개발은 주로 서블릿을 통해 이루어졌습니다. 서블릿은 Java 코드 안에서 HTML을 출력하는 방식으로 동작했는데, 이는 코드가 복잡해지고 유지 보수가 어려워지는 문제가 있었습니다. 페이지 디자인의 어려움: 디자이너와 개발자 간의 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/brY618/btsGjjS0aqE/KZiXEdhgxvNW67FTmsYSeK/img.png)
[ 0. 들어가기 전 ] 바로 이전 포스팅에서는 스프링 프레임워크가 어떻게 등장하게 됐는지를 www의 탄생부터 지금까지 시간 순서대로 알아보았습니다. CGI의 한계로 Servlet이 등장하게 되었는데, 이 Servlet은 서버에서의 핵심 기술이기에 여러 출처를 기반으로 정리해보았습니다. [ 1. Servlet의 등장 배경 ] 초창기 웹 서비스의 서버는 정적 데이터만 전달해주는 기능을 가지고 있었습니다. 하지만, 사용자의 요청에 따른 동적인 처리가 불가능했고, 이를 해결하기위해 등장한 것이 CGl입니다. CGl (Common Gateway Interface)는 동적 데이터를 처리하는 Web Server와 프로그램 사이의 인터페이스(규약)입니다. CGI는 Web Server의 요청을 받으면, 동적 컨텐츠를 ..