합병정렬을 이해할수있는 문제. 의사 코드가 주어지고, 동작과정을 이해할수있어야한다.divide : 길이가 1이될때까지 나눈다.conquer(combine): 왼쪽, 오른쪽 두 배열로 나뉘어 수를 비교하며 임시배열에 저장 후, 원래 배열로 옮긴다.사실 saveNum을 남
해시 함수를 적용해 각 알파벳 문자열을 유일한 수에 대등하도록 하려는 시도. 비둘기집의 원리지만, 최소한 줄이도록 노력.먼저, r = 31, M = 1234567891 이다. a~z = 1~26으로 대응된다. (a)BigInteger를 사용해야한다. 제곱을 할때도 Bi
이분그래프 : 그래프가 둘로 나뉘는 그래프.쉽게 말하자면 그래프가 내려가면서 색깔이 서로 달라야한다.endVertex, 도착하는 정점의 색깔이 서로 달라야 이분그래프가 된다.
단순한 1,2,3,4, ... , N N줄에 N개의 수가있는 유사 트리 형태의 문제. 줄을 따라 내려가면서 가장 큰값이 되는 값을 리턴한다.일단 행, 열 중 열 == 1 -> 계속 1이랑만 더함열 == N -> 계속 N - 1이랑만 더함그 사이의 수는 더 큰 쪽을 따라
간단한 조합문제이다. 고등학교때 배운 nCr = n! / (n - r)! \* r! 을 이용하면 간단히 풀수있다.팩토리얼을 이용하는데, 재귀로 풀수도있고 반복문으로 풀수도있다. 재귀로 처음에 풀어보았는데, 다시 복귀하는 과정이 있어, (전부 이전 팩토리얼을 계산하면서
N개의 수와 N - 1개의 연산자들이 있다.연산 순서는 고려하지않으며, 모든 연산결과에 대한 최댓값과 최솟값을 구하는 문제이다.모든 결과를 고려하는 백트래킹 문제이다. 연산 순서는 고려하지않아 편하며, depth가 N에 도달했을때 결과들을 Math.max, Math.m
재귀가 반복되는 코드를 메모이제이션으로 실행시간을 대폭 단축시킬수있는 문제.저장해논값을 그대로 재사용하는 메모이제이션을 직접 사용해본다. 개념으로만 봐서는 어떻게 사용하는건지 모른다.메모이제이션은 그냥 말그대로 꺼내는거였다.참으로 쉽고 간단한 코드였다. 이 하나로 실행
그냥 순서대로 더하는 수 중에 가장 큰값을 찾는 문제이다.이번에도 점화식을 찾아본다. 처음에는 이중반복문으로 브루트포스? 방식으로 풀어봤다. 역시 시간초과. 다른 방법이 필요했다.이 문제는 여태까지 합을 더하면서, 더했을때 더 작아지면, 그 수를 버리고 다시 max값을