스택/큐를 이용해서 풀어야했던 문제다. 나는 그중에서 큐를 이용해서 풀었고 , 배열을 통해 관리했다. 내용 자체는 어렵지 않게 풀었고 다른 사람의 풀이를 보다가 새로운 함수를 발견해서 적어보려 한다. 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합..
algorithm 헤더의 함수 중 두 값을 비교하여 최대, 최소값을 리턴해주는 max(), min() 함수가 있다. 그런데 두 값이 아니라 배열이나 벡터에서 정해진 구간 중 최대/최소값을 알려주는 함수는 없을까? 결론적으로, 존재한다. max_element , min_element 함수란? 이 함수 또한 algorithm 헤더에 있는데, 구간 안에서(array, list, vector 등) 최대, 최소값을 구하는 함수인 max_element(), min_element() 함수가 존재한다. 그런데 이 함수는 값 자체를 리턴하지 않고 그 값의 주소인 iterator(반복자)를 리턴한다. C++에서는 배열 역시 array라는 클래스 형 객체로 취급됩니다. 그래서 주소값에 관해서 이터레이터 연산이 가능하게 되어..
unique 함수는 algorithm 헤더에 포함된다. unique 함수란? vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수입니다. 주의할 점은 unique 함수를 실행하기 전에 정렬되어 있어야합니다. (sort 함수로 정렬하기) 예를 들어 원소가 1, 1, 2, 3, 4, 5, 5, 6 이렇게 구성되어있었다면, 첫번째 원소 1 다음에 또 1이 중복되서 나왔기 때문에 그 다음 원소인 2가 첫번째 원소 뒤로 가게됩니다. 이런식으로 중복된 수는 뒤로 밀리게 되고 결과는 1, 2, 3, 4, 5, 6, 1, 5 입니다. 이 때 unique 함수는 중복되어 밀리게 된 원소의 시작 부분 즉, 1의 주소를 리턴합니다. 중복 원소 제거하기 위 unique 함수와 erase 함수를 이용하여 중복..
탐욕법 (Greedy) 알고리즘 을 사용해서 풀어야한다. 어렵지 않게 금방 풀었으나 다른 사람의 풀이를 보던 중, 깔끔하면서 목적에 충실한 풀이를 발견해서 리뷰를 해보려한다. 점심시간에 도둑이 들어, 일부 학생이 체육복을 도난당했습니다. 다행히 여벌 체육복이 있는 학생이 이들에게 체육복을 빌려주려 합니다. 학생들의 번호는 체격 순으로 매겨져 있어, 바로 앞번호의 학생이나 바로 뒷번호의 학생에게만 체육복을 빌려줄 수 있습니다. 예를 들어, 4번 학생은 3번 학생이나 5번 학생에게만 체육복을 빌려줄 수 있습니다. 체육복이 없으면 수업을 들을 수 없기 때문에 체육복을 적절히 빌려 최대한 많은 학생이 체육수업을 들어야 합니다. 전체 학생의 수 n, 체육복을 도난당한 학생들의 번호가 담긴 배열 lost, 여벌의 ..
Java에서 DB를 사용할 때, 자바프로그램은 DB 쪽으로 SQL 문을 전송하고, DB는 처리된 결과를 다시 자바프로그램 쪽으로 전달해야 합니다. 이 역할을 하는 객체가 Statement입니다. 자세한 내용은 이전 포스팅을 참고하여주세요. 2020/12/08 - [웹 개발/Java] - [ Java ] JDBC 사용하는 방법 [ Java ] JDBC 사용하는 방법 JDBC란? JDBC란, 자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고 SQL문을 수행하여 처리하고자 할 때 사용되는 표준 SQL 인터페이스 API입니다. 즉, 자바에서 데이터베이스를 사용하기 codingwell.tistory.com PreparedStatement 사용법 그런데 이때, Statement를 사용하지 않고 Prepare..
JDBC란? JDBC란, 자바 언어로 다양한 종류의 관계형 데이터베이스에 접속하고 SQL문을 수행하여 처리하고자 할 때 사용되는 표준 SQL 인터페이스 API입니다. 즉, 자바에서 데이터베이스를 사용하기 위한 절차에 대한 규약입니다. DBMS에 따라 DB를 다루는 방식이 다르다면, 사용자는 각 DBMS의 방식을 모두 알아야하기 때문에 필요한 지식이 너무많아지게 됩니다. 그래서 JDBC를 통해 추상화된 인터페이스를 제공하기만 하고, 데이터베이스의 종류에 상관없이 각 JDBC 드라이버를 통해 특정 DBMS를 사용할 수 있습니다. DB에 접근하기 위한 인터페이스는 JDBC의 API를 사용하면 됩니다. JDBC 드라이버 실제 DB관련 기능이 동작하려면 위에서 말한 인터페이스 만으로는 작업할 수 없습니다. 그렇기..
MVC 패턴이란? MVC 패턴은 어떻게 소프트웨어를 개발할 것인지를 나타내는 개발 방식이다. 웹 어플리케이션과 같이 UI를 통해 사용자와 상호작용을 해야하는 것을 개발할 때 사용하는 방식이다. MVC는 기능을 크게 세가지로 나눈다. - Model (모델) : 비즈니스 영역의 로직을 처리한다. 데이터 베이스와의 관계를 담당한다. - View (뷰) : 사용자에게 보여지는 화면으로 jsp 파일로 작성한다. - Controller (컨트롤러) : 사용자의 입력 처리와 흐름 제어를 담당한다. 주로 java 코드를 말한다. MVC 패턴의 핵심적인 부분을 정리하자면, 비즈니스 로직을 처리하는 Model과 결과 화면을 보여주는 View를 분리한다는 것 어플리케이션의 흐름 제어나 사용자의 처리 요청은 Controlle..
Filter란? 만약 각 서블릿마다 한글 인코딩을 위해 request.setCharacterEncoding("UTF-8");을 작성해야한다면 매우 불편할 수 있다. 이럴 때 사용할 수 있는게 filter 이다. 공통적인 처리(filter)를 추가하여 통신의 사이 사이에서 지정한 동작을 만들어 낼 수 있다. 예를 들어 전달받은 데이터를 인코딩해야한다든지, 세션 데이터를 인증하거나 이벤트나 공지 등의 팝업을 추가 하는 경우들과 같은 상황에 필요할 수 있다. 1. 필터 클래스 작성 자바 클래스 파일을 하나 생성한 후 아래 코드를 작성합니다. Filter는 인터페이스기 때문에 꼭 메소드를 재정의해야한다. package org.sample.filter; import javax.servlet.*; import ja..
1. GET 방식 웹에서는 클라이언트가 서버로 요청을 하면 응답을 할 수 있는 옵션이 있을 수 있다. 클라이언트는 기본적으로 문서를 요청하고 서버는 요청받은 문서를 주는 식으로 일어난다. (http://localhost/hello 라는 문서를 요청) 그런데 get 방식은 클라이언트가 추가적인 것을 요청하며 문서를 요청할 수 있다. http://localhost/hello?cnt=3 이와 같이 말이다. 뒤에 추가적인 옵션을 덧붙였다. 이런 것을 QueryString 이라한다. 이렇게 서버에게 추가적인 옵션을 요청한다. 이때 서버는 그 옵션에 맞게 반응하여 돌려주어야 한다. 서블릿 클래스에 다음과 같은 내용을 추가하여 해당 값을 받아올 수 있다. int cnt = Integer.parseInt(request..
톰캣서버를 사용해 JSP와 Servlet을 배우고 있다. 웹페이지로 Servlet 출력을 하는데, 원하지 않는 출력이 나타나거나 브라우저마다 다른 출력이 나타나거나 한글이 깨지는 현상들이 일어나곤 한다. 왜그럴까? 형식들을 지정하지 않았기 때문이다. 여러 형식들을 지정해서 그에 맞게끔 브라우저가 읽어들이도록 해야한다. 1. Servlet 출력 형식 일단, 아래 코드부터 보자. @WebServlet("/HelloServlet") public class Hello extends HttpServlet { @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IO..