일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 큐
- exception
- Python
- solid
- 자바
- 로버트마틴
- Collection
- design-pattern
- Pattern
- 겨울카카오인턴
- DesignPattern
- Rails
- 스택
- Eclipse
- JDBC
- 파이썬
- 백준
- tcp
- javscript
- 프로그래머스
- Network
- functional programming
- Java
- 함수형 프로그래밍
- 람다 칼큘러스
- 디자인패턴
- lambda calculus
- JavaScript
- Collections
- Spring
- Today
- Total
목록전체 글 (177)
개발자 노트
문제 설명 수의 자리수가 주어졌을 때 그 자리수의 모든 수 집합에 대해 오르막수의 갯수를 모두 구하라! 오르막수는 왼쪽에서 오른쪽으로 자리수가 이동할 때마다 해당 자리수의 값이 점점 더 커지거나 같아야 한다. 첫자리에 0이 들어올 수 있다. 예를 들어 자리수가 2라하면 00에서 부터 시작하여 99까지의 수를 확인하여 오르막수의 갯수를 구하면 된다. 01인 경우 증가하므로 오르막수, 00또한 값이 첫번째 두번째 자리수의 값이 동일하므로 오르막수라 말할 수 있다. 21은 안됨! 문제 접근 오르막수를 수학적으로 정의해보자 i는 자리 위치 (맨 왼쪽이 1이고 오른쪽으로 이동하며 1씩 증가한다.) x_i는 i번째 자리의 수라 한다면 x_i
풀지 못했다. 순환식을 찾지 못했기 때문이다. 내가 자른 방식이 최소라고 어떻게 보장할 수 있을까? 1.역으로 생각하여 1x1타일부터 시작하여 최소를 찾는다. 2. n*m이 잘릴 수 있는 모든 경우를 구한다. 이때, 메모제이션을 이용하면 1x1부터 시작한 결과를 얻을 수 있다. 3. 수학적으로 생각해본다. n과 m이 짝수일 경우 자를 수 있는 수는 아래 왼쪽이 (n-1,m-1)이 된다. 그리고 아래나 오른쪽을 반으로만 자른다고 가정하고, 아래를 자른다면 다를 수 있는 수는 (log_{2}(n-1) , 2*(m-1))이 된다. (아래는 잘렸으므로 반으로 줄어들고, 오른쪽은 아래가 반으로 잘렸기에 복제되어 오른쪽으로 자를 횟수는 2배가 된다.) 두 수가 모두 0이될 때까지 반복한다. 만약 한쪽이 0이 된다면..
문제설명 문제가 간단하여 설명할 것이 없다. 접근 방법 정의를 이해하여 순환식을 작성할 수 있겠지만 복잡해보여서 주어진 수열만으로 규칙을 찾아냈다. 즉, 아이큐 테스트 문제라 생각하고 접근했다. 그래서 규칙을 나타내면 f(n) = f(n-2)+f(n-3)이 되고, n-3을 보듯, 순환식이 적용되는 n의 범위는 n>=4가 된다. 따라서 n= 1, 2 3 일 때 초기값을 정해주었다. 그리고 인풋값의 범위가 최대 100이기 때문에 dp 100번까지 미리 돌고 요청한 값을 출력하면 정답. 그런데 처음에 100을 테스터케이스 최대 수라고 잘못해석하여 범위를 한정지을 수 없다는 생각에 메모제이션으로 푸는 것이 더 간결할 것 같아 메모제이션으로 접근했다. 구현 memo = {1:1,2:1,3:1} def Wave(n..
ROOT폴더에 servlet을 작성한 배경 edwith를 통하여 풀스택 개발자 부스트코스를 수강 중인데, 프로젝트1의 과제로 localhost:8080/servlet 와 같은 ROOT 경로를 통해서 홈페이지를 구축해야만 하는 것으로 오해했다. html 파일은 ROOT폴더 구성을 보아 ROOT폴더에 그대로 넣으면 될 것으로 보였고 무난히 실행됬다. (시작 디렉토리가 ROOT로 되어 있는 듯 하다.) 하지만 servlet은...? eclipse의 도움을 받아 작성했기 때문에 여정이 시작됬다. Tomcat과 Java에 대한 이해도가 낮아 많이 헤맸고 그만큼 많이 이해하게 되었다. 추측은 밑줄 밑 기울이기 처리하겠습니다. 실행 과정 Tomcat의 디렉토리 구조 및 Servlet실행 절차에 대해 알아야 한다.!!..
문제 설명 주어진 수열에서 부분 수열 중, 값이 연속하여 증가하고 그 부분 수열의 길이가 가장 긴 값 을 구하라. 접근 방법 1. Greedy 접근 이 접근 방식은 문제를 이해하는데 도움을 준다. 단계를 i번째 수열의 선택 매 단계의 값을 i번째를 선택했을 때 가장 긴 부분수열의 길이라 정의하였다. 주어진 예제의 수열 {10,20,10,30,20,50}이 수열에서 그리디한 접근 방법을 적용한다면, step1. 첫번째 단계는 자명하다. 10 하나 선택하여 최적 값은 1이 된다. step2. 20보다 직전 값이 더 작으므로 선택. 따라서 최적 값은 2. step3. 10에선 직전 값이 더 크므로 자기 자신 1 step4. 30에선 직전값이 더 작으므로 2 ..... 이런 식이면 최적 값 4가 ..
문제설명 연속 합 중에서 최댓값을 구하라. 접근 방법 유튜브에 본 권오흠 교수님의 설명대로, DP문제를 풀 때 optimal substructure를 나타내는 순환식을 작성해야 한다. 사고 과정은 아래 이미지에 나타나 있는대로 접근하였다. DP문제를 풀다보니 다음을 반드시 고려해야만하고, 이를 고려하면 문제의 구조를 잘 이해하게 된다. 단계를 어떤 변수로 설정하였는가? (이 문제에선 i,i+1,i+2..번째 수를 단계로 보았다.) i번째 단계에서 최적 값에 영향을 주는 변수는 무엇인가? i번째 단계의 최적 값은 이전에 구한 최적값으로 어떻게 표현할 수 있는가? 즉, optimal substructure을 구하라. 1번째 2번째 단계의 최적 값을 푸는 건 간단하다.(이게 어렵다면 정말 어려운 문제다.) 앞..