문제 대학교 알고리즘 동아리 회장인 당신은 회원들과 함께 MT를 왔습니다. 하지만 초보 총무의 실수로 예산이 부족해 긴급하게 학생들에게 추가 모금을 할 수 밖에 없는 상황에 처했습니다. 당신은 회원들에게 부족한 예산을 기부받아 내려고 하고 있습니다. 하지만 학생들은 모두 눈치만 보고 있는 상황입니다.회원들은 모닥불을 가운데 두고 빙 둘러 앉아 있습니다. 눈치를 많이 보는 학생들은 양 옆에 앉은 학생들 중 한 명이라도 기부를 하면 자신은 기부를 하지 않는다고 합니다. 학생들의 순서가 배열로 주어지고 각 배열에 학생들이 기부하려고 하는 금액이 저장되어 있습니다. 이 때 배열의 첫번째와 마지막에 위치한 학생들은 서로 인접한 것으로 생각합니다. 어떻게 하면 기부금을 최대로 모을 수 있을까요? 입출력 예시 입력 ..
문제 유명한 동적계획법 문제중 하나인 냅색(knapsack) 문제를 풀어 보자. 몇 개의 물건이 있고 각 물건에는 무게와 가치라는 2개의 매개변수가 주어진다. 일정한 무게까지 물건을 배낭에 넣을 수 있다고 할 때 가치의 합계가 최대가 되려면 물건을 배낭에 어떻게 넣어야 할까? 풀이 동적계획법을 적용하는 굉장히 유명한 문제로 동적계획법을 이해하는 정석과 같은 문제이다. 핵심은 전체탐색을 하되 이전에 했던 계산을 다시 재활용 하도록 만든다는 점이다. 이를 위해 이차원 배열을 선언하고 배열은 i번째 선택에서 총무게가 j일 때 가지는 최대 가치로 설정한다. 같은 횟수의 선택일 때 같은 무게에서 이미 구한 값 보다 더 낮은 가치라면 굳이 탐색할 필요가 없으니 수행시간이 상당히 줄어들게 된다. 코드은 다음과 같다...
문제 당신은 미로 제작을 의뢰 받았다. 당신이 제작할 미로는 조금 특이한데 바로 미로에 도전하는 사람의 점프력이 상당히 좋기 때문이다. 이 도전자는 초기에 주어진 int[] moveRow, int[] moveCol에 따라 점프할 수 있는데 미로의 밖으로 나가거나 미로의 막힌 부분 위에 올라갈 수는 없다.이 도전자는 항상 최단거리로 움직이는데 당신은 미로의 출구를 가장 오랜시간이 걸리는 곳에 정해야 한다. String 배열로 주어지는 maze에는 "."과 "X"로 구분된 미로 지도가 주어진다. 가장 먼 거리를 움직여야 찾을 수 있는 미로의 출구까지 간 거리를 리턴하는 함수를 만들어라 입출력예시 입력예시 1) String[] maze = {"X.X","...","XXX","X.X"}; int startRow..
(2) 라이브러리 등록과 회원목록 출력 1) 라이브러리 등록 서블릿으로 mysql에 있는 데이터를 쉽게 가져올 수 있게 하는 라이브러리를 추가해야 한다. 우리는 gradle을 사용하기 때문에 손쉽게 라이브러리를 추가할 수 있다. build.gradle 파일에 dependencies 를 추가한다. 우리가 추가할 라이브러리는 mysql-jtbc driver 라이브러리와 servlet-api 라이브러리이다. 다음과 같은 코드를 build.gradle 파일에 추가한다. 1234567dependencies { // servlet api providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1' //mysql jdbc dri..
서블릿(servlet)이란? 자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다. 서블릿은 과거에 많이 사용하던 웹개발 프로그램이다. 하지만 여전히 사용하는 곳이 많고 유지보수 업무를 하게 된다면 흔히 볼 수 있는 형태가 될 것이다. 서블릿을 이용해 간단한 회원관리페이지를 만들어 보자. 먼저 회원관리를 위한 데이터베이스가 필요하다. 1) mysql을 실행하..
지난시간에는 gradle을 이용하여 기초적인 java application project를 생성하고 eclipse에 import 시켜 보았다. 이번에는 지난번에 만든 gradletest project를 tomcat서버와 연동하여 index.html 페이지를 직접 띄워 보는 것을 실습해 보자. 먼저 서버를 구축해 보자. 1) https://tomcat.apache.org 사이트에 접속해 톰캣 서버를 내려받고 eclipse에서 서버를 추가해주자. 서버 추가 방법은 어렵지 않으므로 튜토리얼을 따라하면 금방 만들 수 있다. 그리고 위 사진과 같이 새로운 톰캣 서버를 추가해 준다. 2) 서버의 Add and Remove 메뉴를 열고 import 한 gradletest project를 add 한다. 서버에 프로젝트..
문제 주어진 정수 배열 number에는 50개 미만의 1보다 크고 1000보다 작은 정수가 주어져 있다. 이 중 단 하나의 숫자에 +1 하여 전체 숫자의 곱을 가장 크게 만든 뒤 그 곱을 리턴하라. 입력예시 numbers = {1, 2, 3}return : 12 numbers = {1, 3, 2, 1, 1, 3}return : 36 풀이 가장 쉽게 떠올릴 수 있는 풀이는 먼저 배열의 모든 원소의 곱을 구한 뒤, 전체 배열을 순회하며 그 배열의 숫자를 나눈뒤 다시 1을 더한 숫자로 곱해 보며 최대값을 찾는 것이다. 시간 복잡도는 O(N)으로 매우 짧지만 이 문제는 약간의 수학적 센스를 발휘하면 조금 더 쉬워진다. +1 을 하여 전체의 곱을 가장 크게 만드는 숫자는 배열에서 가장 작은 숫자이다. 어떤 숫자 ..
문제 사람들은 각각 두가지의 취미를 가지고 있다고 한다. 취미는 String 배열인 first와 second에 나누어져 들어온다. 예를 들어 i번째 사람의 첫번째 취미는 first[i] 에 문자열로 저장되어 있고, 두번째 취미는 second[i] 에 저장되어 있다. 이때 가장 많은 사람들이 즐기는 취미 생활은 총 몇 명이 즐기고 있는지 리턴하라. 입 출력 예제 입력String[] first = {'a','b','a','a'};String[] second = {'b','a','b','b'}; 출력4 풀이 단순히 생각해서 이중반복문을 사용해서 전체 배열을 돌면서 같은 이름의 숫자를 세면 된다. 이중반복문을 사용하는 것이 코드를 지저분하게 보이기 때문에 Map객체를 이용해 조금 더 간결한 코드를 얻을 수 있다..
- Total
- Today
- Yesterday
- 유지보수
- 경고
- REST API
- 디자인패턴
- 자바스크립트개론
- restful api
- 야근
- html
- 클린코드
- 크롬
- 코딩의 기술
- GROUP BY
- 몰라서망신
- 문장 생성기
- Count
- Markov
- 로그
- 전략패턴
- java
- DP
- Warning
- RESTful
- CONVENTIONS
- 마르코프
- markov chain
- 마르코프 연쇄
- Spring in Action
- 동적계획법
- was
- 자바스크립트 개론
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |