일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- scala
- 스칼라
- 문제풀이
- boj
- 파이썬
- zookeeper
- 주키퍼
- 동적프로그래밍
- OOM
- 튜토리얼
- DP
- docker
- Python
- 알고리즘
- HBase
- redis
- go
- programmers
- codewars
- leetcode
- Java
- dynamic programming
- 코드워
- Linux
- 리눅스
- Go언어
- golang
- 프로그래머스
- 자바
- gradle
- Today
- Total
목록알고리즘 (16)
파이문
2293. 동전 1(https://www.acmicpc.net/problem/2293) 동전 경우의 수 구하는, 나름 유명한 문제다. 역시나 알고스팟에도 같은 문제가 있다. (https://algospot.com/judge/problem/read/COINS) 구하려는 값 크기를 갖는 배열 dp를 만드는 데, 이 때 사이즈를 값 + 1 해야, 예외 처리 따로 하지 않고 쉽게 할 수 있다.이렇게 만들어진 dp 에 경우의 수를 갱신하는데, i는 i원을 의미한다. 예를 들어서 dp[3]은 3원을 만드는 방법인데, 3원을 만드는 방법은 1원을 만드는 방법과 2원을 만드는 방법 두개를 더 하면 된다. 유투브에 강의 몇 개가 있어서 하나 첨부해 본다. https://www.youtube.com/watch?v=jaNZ..
11053. 가장 긴 증가하는 부분 수열(https://www.acmicpc.net/problem/11053) 유명한 문제이다. (알고스팟에도 있는 문제다. https://algospot.com/judge/problem/read/LIS) 일명 Longest Increasing Sequence 라는 문제인데, 주어진 수열에서 가장 긴 길이를 가질 수 있는 증가하는 부분 수열의 길이를 리턴해야 한다. 가장 먼저 1로 (가질 수 있는 최소 길이값이 길이1이므로) 값을 초기화 한 dp를 선언하고, i는 1부터 길이까지 증가시키고 j는 0부터 i까지 증가 시켜서, i번째 값이 j번째 값 보다 크면 dp[j] + 1이나 현재 값 dp[i] 중 maximum 값으로 갱신하는 것이다. 동영상 설명이 잘 되어 있어서 링..
2579. 계단 오르기(https://www.acmicpc.net/problem/2579) 문제의 요점은 연속해서 계단 3개를 밟을 수 없다는 것이다. 작은 단위로 계단이 3개 있을 때를 가정하자면 다음과 같다.1번 계단 -> 3번 계단 과 1번 계단 -> 3번 계단을 밟는 것 중 최대 값이 3번째 계단에 다다랐을 때의 최대 값이 되는 것이다. (문제에서는 무조건 마지막 계단을 밟아야 한다.) 계단이 4개 있을 때로 문제를 늘리면 1. 1번 계단 -> 3번 계단 -> 4번 계단 (dp[1] + 계단[3] + 계단[4])2. 1번 계단 -> 2번 계단 -> 4번 계단 (dp[2] + 계단[4]) 왜 1번 계단 이 dp[1]이 되고 1번 계단 -> 2번 계단이 dp[2]가 되는지는, 계단 수를 늘려서 그려보..
수열에서 연속된 구간의 최대 합 구하기Largest Sum Contiguous Subarray / Maximum subarray problem 유명한 문제로, 주어진 수열에서 최대 합을 구하는 것이 요점이다. 쉽게 생각하자면 O(n^2)으로 구하면 되지만 (Brute Force), 대부분의 문제 풀이 사이트에서는 O(n)으로 풀기를 권고하고 있다. 제일 무난 한것이 Dynamic Programming으로 푸는 것인데, Kadane’s Algorithm이라고 한다. 현재 까지의 구간의 최대 합과, 해당 숫자와 Max 값을 비교하고 이 값을 다시 전체 합과 Max 값을 비교하는 것이다.class Solution: def maxSubArray(self, nums): """ :type nums: List[int..
540. Single Element in a Sorted Array(https://leetcode.com/problems/single-element-in-a-sorted-array/#/description) 어떤 List에 int 값이 들어있는데 하나의 숫자만 한개가 있고, 나머지는 모두 두개씩 있을 때, 그 하나만 존재하는 숫자를 리턴하는 것입니다. for문 두번 돌리면 간단히 해결하지만 조건이 붙었습니다. 공간 복잡도 O(1)에, 시간 복잡도가 (logN)입니다. logN이기 때문에 분할해야 하는데, 저는 재귀로 나누어가면서 풀었습니다.List의 정 가운데를 자른다고 생각하면 현재 숫자를 기준으로 왼쪽이 홀수개의 리스트면 왼쪽에 찾고자 하는 숫자가 있을 것이고 오른쪽이 홀수개의 리스트면 오른쪽에 있을..
101. Symmetric Tree(https://leetcode.com/problems/symmetric-tree/#/description) 대칭이 되는 트리인지 아닌지를 판별하는 문제입니다.아래와 같이 가운데(?) 를 기준으로 접혀진다면(대칭이 된다면) True를 리턴하고 1 / \ 2 2 / \ / \ 3 4 4 3한쪽이 비거나, 다른 숫자가 들어가거나 등등 대칭이 되지 않는다면 False를 리턴합니다. 1 / \ 2 2 \ \ 3 3 Easy 문제이기 때문에 어렵게 생각할 필요가 없습니다.문제 그대로 맨 왼쪽은 맨 오른쪽과 같아야 하고, 가장 왼쪽의 오른쪽은 (형제 노드는) 가장 오른쪽의 왼쪽 노드 (형제 노드)와 같으면 됩니다. 재귀로 계속 체크해나가면서, None이면 가장 끝의 노드이니 그 때..