https://www.acmicpc.net/problem/14225 14225번: 부분수열의 합 수열 S가 주어졌을 때, 수열 S의 부분 수열의 합으로 나올 수 없는 가장 작은 자연수를 구하는 프로그램을 작성하시오. 예를 들어, S = [5, 1, 2]인 경우에 1, 2, 3(=1+2), 5, 6(=1+5), 7(=2+5), 8(=1+2+5)을 만들 www.acmicpc.net 문제 해결 과정 예제 입력 1번 경우의 그림이다. 아무 것도 없는 상태에서 각 배열의 값을 DFS 방식으로 탐색하며 store라는 배열에 각 수열의 합을 채워 넣는 방식이다. 이때, store 배열은 조건에 "100,00보다 작거나 같은 수" 가 최대 20개까지 주어지니까 1~2,000,000 으로 범위를 생각하여 store의 배..
서블릿 서블릿 -> WAS에 서블릿 코드를 클래스 파일로 빌드해서, WAS에서 실행 HttpServlet을 상속받아 HttpServletRequest 객체와 HttpServletResponse 객체를 service 메서드로 관리한다. HttpServletRequest HTTP 요청 메시지를 직접 파싱해도 되지만, 불편하고 어렵다. 서블릿은 이를 파싱해주고, 결과를 HttpServletRequest 객체에 담아서 제공한다. 역할 HTTP 메서드, URL, 쿼리 스트링, message body와 같은 정보를 파싱 임시 저장소 기능 - 저장 .setAttribute(), 조회 .getAttribute 세션 관리 기능 - .getSession HttpServletRequest의 정보 조회 start-line 조..
WAS(Web Application Server) 와 Web Server Web Server HTTP기반으로 동작 정적 리소스 제공 NGINX,APACHE .. WAS HTTP기반으로 동작 웹 서버 기능 + 프로그램 코드를 실행하여 애플리케이션 로직 수행 -> 사용자에 따른 동적 페이지 제공 동적 HTML, HTTP API, 서블릿, JSP, 스프링 MVC Tomcat ... 둘의 가장 큰 차이는 웹 서버는 정적 리소스를, WAS는 애플리케이션 로직을 제공하는 부분이다. -> WAS는 애플리케이션 코드를 실행하는데 특화 웹 시스템의 구성 웹 시스템은 WAS, DB로 구성할 수 있다. 하지만, WAS가 부담하는 영역이 커지고(정적 리소스까지 제공해야 함), 장애 발생 때 대응이 어렵다. -> WAS가 전..
HTTP 상태코드상태코드 - 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 ( OK, forbidden) 1xx (Informational) : 요청이 수신되어 처리중 2xx (Successful) : 요청 정상 처리 200 OK201 Created, 요청이 성공하여 새로운 리소스(회원 가입같은)가 생성됨202 Accepted, 요청은 접수되었지만 처리는 안됨204 No Content, 요청을 성공적으로 수행했지만, 반환할 데이터가 없음(필요가 없기에)3xx (Redirection): 요청을 완료하려면 추가 행동이 필요 웹 브라우저는 3xx 응답 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다. 영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 이동, 기존 ..
인터넷 네트워크 IP(Internet Protocol, 인터넷 프로토콜) IP 주소를 통해 데이터를 패킷이라는 통신 단위로 전달한다. IP패킷의 구성요소 - 출발지 IP, 목적지 IP, 메세지 등.. IP의 한계? 비연결성 - 패킷을 받을 수 없는 상황임에도 패킷을 전송한다. 비신뢰성 - 패킷의 받는 순서, 받을 수 있다는 보장을 하지 못한다. 프로그램 구분 - 같은 IP를 사용한다면 어떻게 구분할 것인지 확정 못한다. 프로토콜 계층의 기본적인 동작 구조를 알아보자 인터넷 프로토콜 스택 - 애플리케이션 계층(HTTP, FTP), 전송 계층(TCP, UDP) 인터넷 계층(IP), 네트워크 인터페이스 계층 내가 무언가(메시지)를 전송하려 한다면 메시지가 애플리케이션 계층의 소켓 라이브러리를 통해 OS계층으로..
https://www.acmicpc.net/problem/6603 6603번: 로또 입력은 여러 개의 테스트 케이스로 이루어져 있다. 각 테스트 케이스는 한 줄로 이루어져 있다. 첫 번째 수는 k (6 < k < 13)이고, 다음 k개 수는 집합 S에 포함되는 수이다. S의 원소는 오름차순으로 www.acmicpc.net 문제 해결 방법 순열 문제라고 생각했습니다. 기본적으로 k개의 수 중 6개의 수를 골라야 하며, 수는 사전순으로(오름차순) 배치를 해야 하기에 범위를 나눠 생각했습니다. k개의 수 중 첫번째 자리에 올 수 있는 수는 (k-6)+1 가지 입니다. 예를 들어, k가 7이라면 첫번째로 올 수 있는 수는 1과 2 입니다. 3이 되는 순간 3, 4, 5, 6, 7 이 다섯 가지의 수밖에 없기 때..
빈 생명주기 콜백이란 DB Connection pool - 애플리케이션 서버와 DB 서버를 연결하여 미리 connection을 생성해 두는 것 (자세한 것 아님, 간단한 요약) DB connection pool이나 네트워크 소켓같이 애플리케이션 종료 시점에 연결을 모두 종료하려는 작업을 할 때, 객체의 초기화와 종료작업이 필요함 스프링 빈은 객체 생성 후 의존관계 주입이라는 사이클을 갖는다( 생성자 주입은 예외 ) 즉, 의존관계 주입이 끝나야 데이터를 사용할 수 있는 준비가 완료되는 것이다. 의존관계 주입이 완료된 시점을 알 수 있는 방법이 바로 콜백이다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료( 이는 스프링 전용 ..
의존관계 주입 방법의 종류 1. 생성자 주입 생성자를 통해 의존관계를 주입받는다. 생성자 호출 시점에 단 1번 호출되는 것이 보장된다. 불변, 필수 의존관계에서 사용한다. -> 수정할 수 있는 기능을 추가하지 않는 것이 중요 생성자가 하나인 경우 @Autowired를 사용하지 않아도 스프링 컨테이너가 자동으로 의존관계 주입한다. 2. 수정자(setter) 주입 setter로 필드의 값을 변경하는 수정자 메서드를 통해 의존관계 주입 ( 메서드명은 set필드명 ) 선택, 변경가능 의존관계에서 사용한다. -> 호출하여 변경할 수 있는 경우 +) 자바빈 프로퍼티 규약 -> 필드의 값을 직접 변경하지 않고 get, set 메서드를 통해 읽고 수정하는 내용 3. 필드 주입 필드에 바로 의존관계를 주입시키는 방법 외..
https://www.acmicpc.net/problem/1913 1913번: 달팽이 N개의 줄에 걸쳐 표를 출력한다. 각 줄에 N개의 자연수를 한 칸씩 띄어서 출력하면 되며, 자릿수를 맞출 필요가 없다. N+1번째 줄에는 입력받은 자연수의 좌표를 나타내는 두 정수를 한 칸 띄어서 www.acmicpc.net 문제 접근 방법 달팽이가 움직이는 모습은 위와 같다. 시작점을 먼저 찾고 ( N/2, N/2 ) 시작점을 기준으로 움직일 수 있는 범위를 제한하여 구동하면 된다. 예를 들어 1->2, 2->3을 갈때는 최대 한 칸만 움직일 수 있지만 3->5, 7->10 등 움직일 수 있는 범위가 늘어나는 포인트가 생긴다. 이 포인트들은 달팽이가 위, 아래로 움직일 때 (x,y에서 x값이 증가하거나 감소할 때) 이..
컴포넌트 스캔과 의존관계 자동 주입 이전까지 스프링 빈을 등록하려 했다 - @Bean을 통해 설정 정보에 직접 등록 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 @ComponentScan 기능을 제공한다. 컴포넌트 스캔은 @Component이 붙은 클래스를 스캔해서 스프링 빈으로 등록한다. +) @Configuration이 붙은 설정 정보도 자동 등록이 됨, 충돌을 조심하자 단, 스프링 빈 이름은 클래스 이름의 첫 문자를 소문자로 변경하여 사용한다. ( AddPrice -> addPrice ) 또한, 의존관계를 자동으로 주입해주는 @Autowired 기능도 제공한다. 디폴트는 스프링 컨테이너가 타입이 같은 빈을 찾아서 주입한다. 컴포넌트 스캔의 탐색 위치와 기본 스캔 대상 컴포넌트 스캔의 ..