목록분류 전체보기 (61)
Inor
테트로미노 문제는 2차원 배열에 테트리스 게임에서 나오는 막대 모양을 올려 놨을때 해당 위치의 값들을 더해서 최댓값을 찾아내는 문제 입니다. 테트리스에 나오는 막대 모양은 회전, 대칭이 가능하다고 문제에서 설명해주고 있습니다. 해당 문제는 DFS를 이용해서 풀었습니다. 모든 막대기를 만드는 블록들이 총 4개라는 공통점을 찾았고 4번씩 이동했을때 모든 테트리스의 막대기 모양이 만들어진다는 것을 직접 그려가며 발견하였습니다. 4번 이동했을 경우에 1번, 2번, 3번, 4번째에 탐색된 위치의 값들을 더해서 최댓값과 비교하였습니다. 그러나 여기서 한가지 예외 상황이 있었는데 ㅗ모양의 막대기는 DFS를 이용해서 해결할 수 없다는 문제를 발견하였습니다. 이유는 중간에 3갈래 길이 생기는데 재귀함수를 이용해서 모든 ..
2차원 배열에 위치한 토마토가 4방향(동, 서, 남, 북)으로 퍼지면서 주변에 토마토들이 익어가는 문제 입니다. 전형적인 BFS 문제이라고 판단하였고 BFS를 이용해서 문제를 해결하였습니다. 초기에 입력된 정보에서 토마토의 위치를 큐에 넣어두고 BFS탐색을 시작하였습니다. 토마토가 이미 익었을 경우와 벽이 있는 경우에는 큐에 넣지 않았고 익지 않은 토마토를 큐에 넣고 현재 위치의 토마토가 익은 날짜 +1을 해서 몇일째에 토마토가 익었는지 2차원 배열에 표시하였습니다. 아래는 문제와 소스 코드 입니다. https://www.acmicpc.net/problem/7576 import java.io.BufferedReader; import java.io.IOException; import java.io.Inpu..
연구소에 바이러스가 퍼지지 못하게 3개의 기둥을 세워서 피해를 최소한으로 만드는 알고리즘 문제 입니다. 탐색(BFS, DFS)에대해서 공부해야겠다는 생각을 갖도록 만들었던 문제 입니다. 처음에는 어떻게 접근해야할지 감도 못잡았는데 탐색에대해 공부하니 어렵지 않게 풀 수 있었습니다. 아래는 문제의 링크 입니다. https://www.acmicpc.net/problem/14502 3개의 기둥을 세우는 방법은 재귀 함수를 만들어서 해결 했습니다. 3개의 기둥이 모두 세워졌을때 BFS탐색을 이용해서 벽이 아닌 곳으로 바이러스를 퍼뜨렸습니다. 그리고 바이러스가 퍼진 연구소를 다시 원상 복귀 시키며 바이러스가 퍼지지 않은 부분을 계산하였습니다. 문제를 풀면서 아쉬웠던 부분은 기둥을 세우는 부분의 재귀 함수를 조금 ..
로봇 청소기를 회전 시키며 이동시키고 이동한 구역을 청소하는 방식으로 프로그램이 실행되도록 하는 알고리즘 문제 입니다. 저는 DFS를 이용해서 로봇청소기를 이동 시키려고 했습니다. 그러나 코드를 다 만들고나서 들었던 생각은 이건 DFS는 아니고 그냥 단순히 시뮬레이션으로 만든것 같다는 느낌이 들었습니다. DFS를 사용하려고 했다는 것에 큰 의미를 두겠습니다.. 아래는 문제의 링크 입니다. https://www.acmicpc.net/problem/14503 구현 과정에서 가장 먼저 생각했던 것은 로봇청소기를 회전 시키는 방법과 청소할 구역이 없을때 후진 시키는 방법을 생각하였습니다. 회전의 경우에는 지금 로봇이 바라보고 있는 위치의 값에 따라서 변경해주었습니다. 후진도 마찬가지로 현재 바라보는 방향에서 뒤..
JSP 동작 원리 Servlet의 경우에는 java 코드를 이용해서 html 파일이 작성되는 방식으로 동작이 됐습니다. 그러나 JSP의 경우에는 html 파일에 스크립트릿 태그를 이용해서 자바 코드를 작성하는 방식으로 jsp 파일을 생성 합니다. 이렇게 생성된 파일로 클라이언트의 요청이 오면 JSP 컨테이너가 jsp 파일을 Servlet 파일로 변환 합니다. 그리고 Servlet 파일은 컴파일 돼서 class 파일로 변환이 되고 요청이 있었던 웹브라우저에 html 파일 형식으로 응답 합니다. JSP 태그 스크립트릿 : JSP 문서 내부에 자바 코드를 작성할 수 있도록 선언하는 태그 입니다. 로 끝이 납니다.선언 : JSP 문서 내부에서 사용되는 변수나 메서드를 선언할 수 있도록 하는 태그 입니다. 로 끝..
생명주기 대부분의 프로그램이 생명주기를 갖고 있듯이 서블릿도 생명주기를 갖고 있습니다. 서블릿 객체가 생성, 실행, 소멸 되는 과정에서 호출되는 특정 메서드들이 있습니다. 생명주기에 따라서 특정 메서드가 호출이 되고 그 안의 로직을 수행 합니다. Servlet에도 각 과정에서 호출이 되는 몇가지 메서드들이 있습니다. 그것들을 알아보도록 하겠습니다. 초기화(initialization) 사용자의 Servlet 클래스가 상속 받는 HttpServlet 클래스의 init() 메서드를 오버라이드해서 초기화 메서드를 생성할 수 있습니다. 이 메서드는 서블렛 객체가 생성 되면서 호출이 되는 메서드로서 주로 초기화 작업을 수행 합니다. 초기화 전에 특정 작업(전처리)을 수행해야되는 경우가 있다면 @PostConstru..