분류 전체보기(250)
-
백준 7562: 나이트의 이동
문제 체스판 위에 한 나이트가 놓여져 있다. 나이트가 한 번에 이동할 수 있는 칸은 아래 그림에 나와있다. 나이트가 이동하려고 하는 칸이 주어진다. 나이트는 몇 번 움직이면 이 칸으로 이동할 수 있을까? 입력 입력의 첫째 줄에는 테스트 케이스의 개수가 주어진다. 각 테스트 케이스는 세 줄로 이루어져 있다. 첫째 줄에는 체스판의 한 변의 길이 l(4 ≤ l ≤ 300)이 주어진다. 체스판의 크기는 l × l이다. 체스판의 각 칸은 두 수의 쌍 {0, ..., l-1} × {0, ..., l-1}로 나타낼 수 있다. 둘째 줄과 셋째 줄에는 나이트가 현재 있는 칸, 나이트가 이동하려고 하는 칸이 주어진다. 출력 각 테스트 케이스마다 나이트가 최소 몇 번만에 이동할 수 있는지 출력한다. package com.c..
2022.04.08 -
스프링 예외 처리와 오류 페이지
서블릿은 크게 두가지 방식으로 예외 처리를 지원한다. Exception (예외) response.sendError(HTTP 상태 코드, 오류 메시지) Exception(예외) 자바의 메인 메서드를 실행하면 main이라는 이름의 쓰레드가 실행된다. 실행 도중에 예외 처리를 하지못하고 처음 실행한 main()메서드를 넘어서 예외가 던져지면, 예외 정보를 남기고 해당 쓰레드는 종료된다. 웹 애플리케이션의 경우, 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 실행된다. 애플리케이션에서 예외가 발생했는데, 어디선가 try ~ catch로 예외를 잡아서 처리하면 아무런 문제가 없다. 그런데 만약에 애플리케이션에서 예외를 잡지 못하고, 서블릿 밖으로 까지 예외가 전달되면 어떻게 동작할까? 톰캣 같..
2022.04.06 -
백준 1012번: 유기농 배추
문제 차세대 영농인 한나는 강원도 고랭지에서 유기농 배추를 재배하기로 하였다. 농약을 쓰지 않고 배추를 재배하려면 배추를 해충으로부터 보호하는 것이 중요하기 때문에, 한나는 해충 방지에 효과적인 배추흰지렁이를 구입하기로 결심한다. 이 지렁이는 배추근처에 서식하며 해충을 잡아 먹음으로써 배추를 보호한다. 특히, 어떤 배추에 배추흰지렁이가 한 마리라도 살고 있으면 이 지렁이는 인접한 다른 배추로 이동할 수 있어, 그 배추들 역시 해충으로부터 보호받을 수 있다. 한 배추의 상하좌우 네 방향에 다른 배추가 위치한 경우에 서로 인접해있는 것이다. 한나가 배추를 재배하는 땅은 고르지 못해서 배추를 군데군데 심어 놓았다. 배추들이 모여있는 곳에는 배추흰지렁이가 한 마리만 있으면 되므로 서로 인접해있는 배추들이 몇 군..
2022.04.06 -
백준 2847: 게임을 만든 동준이
동준이가 이상한 게임을 만들었다. 문제 학교에서 그래픽스 수업을 들은 동준이는 수업시간에 들은 내용을 바탕으로 스마트폰 게임을 만들었다. 게임에는 총 N개의 레벨이 있고, 각 레벨을 클리어할 때 마다 점수가 주어진다. 플레이어의 점수는 레벨을 클리어하면서 얻은 점수의 합으로, 이 점수를 바탕으로 온라인 순위를 매긴다. 동준이는 레벨을 난이도 순으로 배치했다. 하지만, 실수로 쉬운 레벨이 어려운 레벨보다 점수를 많이 받는 경우를 만들었다. 이 문제를 해결하기 위해 동준이는 특정 레벨의 점수를 감소시키려고 한다. 이렇게해서 각 레벨을 클리어할 때 주는 점수가 증가하게 만들려고 한다. 각 레벨을 클리어할 때 얻는 점수가 주어졌을 때, 몇 번 감소시키면 되는지 구하는 프로그램을 작성하시오. 점수는 항상 양수이어..
2022.04.06 -
로그인 처리 - 필터, 인터셉터(2)
로그인 처리 - 필터, 인터셉터(1) 에서 필터를 다루었다. 본 게시물에서는 인터셉터를 다룬다. 스프링 인터셉터도 서블릿 필터와 같이 웹과 관련된 공통 관심 사항을 효과적으로 해결할 수 있는 기술이다. 서블릿 필터가 서블릿이 제공하는 기술이라면, 스프링 인터셉터는 스프링 MVC가 제공하는 기술이다. 둘다 웹과 관련된 공통 관심 사항을 처리하지만, 적용되는 순서와 범위, 그리고 사용방법이 다르다. 하나씩 살펴보자! 인터셉터의 위치는 디스패처 서블릿과 컨트롤러 사이에 위치해있다. 앞서 배운 필터는 서블릿에서 전처리를 한다면, 인터셉터는 컨트롤러로 날아가는 요청을 낚아채 후딱딱 처리한다음 컨트롤러로 보내는(혹은 보내지 않는) 역할을 수행한다. HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터..
2022.04.05 -
로그인 처리 - 필터, 인터셉터 (1)
로그인 처리 - 필터, 인터셉터 (1) 게시물은 필터를 다룹니다. 로그인 처리 - 필터, 인터셉터 (2)에서 인터셉터를 다루겠습니다. 필터 다음과 같은 상황이다. 내가 만든 웹사이트에 로그인 하지 않은 사용자는 회원가입, 홈 화면 외에는 접근을 막고싶다. 로그인 하지 않은 사용자가 url로 직접 호출하면 관리, 상세 페이지에 접근이 가능한 상황이다. 이를 막기위해서는 1. 모든 컨트롤러에서 로그인 여부를 체크하는 로직을 개발한다. 세션이 null이거나 session Attribute에서 id가 없으면 로그인 페이지로 쫓아내면 된다. 근데 이렇게 할 경우, 로그인 여부를 체크하는 로직이 변경된다면? 모든 컨트롤러를 다 뒤져가며 일일이 수정해야 한다. 심지어 몇몇 군데는 로그인 여부를 체크하는 로직이 누락될..
2022.04.05