본문 바로가기
728x90
반응형

algorithm56

[algorithm] 백준 - 이전 순열 이전 순열 이전 순열은 다음 순열과 비슷한 방식으로 푼다. 순열을 나열했을 때 주어진 순열 이전 순열을 출력하는 문제이다. 1, 3, 2을 예시로 들어본다면, 이전 순열은 1, 2, 3이 된다. 1, 2, 4, 3를 예시로 들어본다면, 이전 순열은 1, 2, 3, 4가 된다. 1, 3, 2, 4의 이전 순열은 1, 2, 4, 3이 된다. 1, 2, 3, 4의 이전 순열은 없으므로 -1을 출력한다. 이전 순열이 존재할 수 있는 조건은 arr[i - 1] > arr[i]가 존재해야한다. 뒤에서 앞으로 반복문을 수행 후, 이 조건에 만족하는 수를 기준으로 양쪽으로 나눈다. 이후 arr[i - 1]보다 작은 수를 arr[i] 쪽 순열을 뒤에서 앞으로 조회 후 swap한다. 그 후 arr[i] 쪽 순열을 내림차순.. 2020. 10. 29.
[algorithm] 숨바꼭질 3 가중치가 같을 경우 bfs로 하면 최단거리가 나오지만, 가중치가 다를 경우 dijkstra를 통해 최단거리를 구해야한다. 이 문제는 자칫 보면 조건문의 순서로 문제가 맞고 틀리고가 결정되는 것처럼 보일 수 있다. 나도 이 문제를 풀 때 실수를 했다. #include #include #include #include using namespace std; bool visited[100001] = {false}; int directx[] = {1, -1, 2}; int dijkstra(int soobin, int sister){ priority_queue pq; pq.push({0, soobin}); visited[soobin] = true; while(!pq.empty()){ pair node = pq.top.. 2020. 10. 29.
[algorithm] 테트로미노 테트로미노 회전과 대칭이 가능하다. 테트로미노 하나를 적절히 놓아서 테트로미노가 놓인 칸에 쓰여 있는 수들의 합을 최대로 하는 프로그램 dfs를 이용하여 depth 4를 거쳤을 때 테르로미노 형태로 접근할 수 있다. 회전과 대칭했을 때도 동일하다. 하지만 예외에 대해서는 하드코딩으로 접근해야 한다. dfs로 구할 수 없는 경우이기 때문이다. #include using namespace std; int directx[] = {0,0,1,-1}; int directy[] = {1,-1,0,0}; int termino[4][4][2] = { {{0,0},{0,1},{0,2},{1,1}}, {{1,0},{0,1},{1,1},{2,1}}, {{0,0},{1,0},{1,1},{2,0}}, {{0,1},{1,0},{.. 2020. 10. 28.
[algorithm] 백준 - 다음 순열 순열을 나열했을 때 주어진 순열 다음 순열을 출력하는 문제이다. 1, 2, 3을 예시로 들어본다면, 다음 순열은 1, 3, 2가 된다. 1, 2, 3, 4를 예시로 들어본다면, 다음 순열은 1, 2, 4, 3이 된다. 1, 2, 4, 3의 다음 순열은 1, 3, 2, 4가 된다. 4, 3, 2, 1의 다음 순열은 없으므로 -1을 출력한다. 다음 순열이 존재할 수 있는 조건은 arr[i - 1] < arr[i]가 존재해야한다. 뒤에서 앞으로 반복문을 수행 후, 이 조건에 만족하는 수를 기준으로 양쪽으로 나눈다. 이후 arr[i - 1]보다 큰 수를 arr[i] 쪽 순열을 뒤에서 앞으로 조회 후 swap한다. 그 후 arr[i] 쪽 순열을 오름차순 sort하면 다음 순열이다. 자세히 살펴보자면, arr[0].. 2020. 10. 28.
[algorithm] 최대 공배수, 최소 공배수 수학 최대공약수 두 수 이상의 여러 수의 공통인 약수(공약수) 중 가장 큰 수 최소 공배수 두 수 이상의 여러 수의 공통인 배수(공배수) 중 가장 작은 수 최대 공약수 & 최소 공배수 구하는 법 모든 수가 서로수로 나눠질 때까지 나눈다. 나누었던 수를 곱하면 최대 공약수이다. 최소 공배수는 최대 공약수 * 서로수이다. 유클리드 알고리즘 두 자연수 a, b가 주어졌다. 가장 큰 값을 a, 다른 값 b, a와 b를 나눈 나머지를 n이라 했을 때, n이 0일 경우 -> b는 최소 공배수가 된다. 그러지 않을 경우 -> a에 b값을 대입하고, b에 n의 값을 대입한다. n이 0이 될 때까지 위를 반복한다. 만일 자연수가 n개일 때, 첫번째 값과 두번째 값을 대입한 uclid 호출하여 gcd를 구한 후, 이어서 .. 2020. 10. 27.
[algorithm] Max Array Sum - 답있음 주의 https://www.hackerrank.com/challenges/max-array-sum/problem?h_l=interview&playlist_slugs%5B%5D=interview-preparation-kit&playlist_slugs%5B%5D=dynamic-programming Max Array Sum | HackerRank Find the maximum sum of elements in an array. www.hackerrank.com 안녕하세요 대우니입니다 :) 오랜만에 dp 문제를 풀려고 하니 생각이 안나서 오래걸렸던 문제였습니다. dp문제 중에서는 쉬운 편(?) 이었던 거 같은데 말이죠. arr = [3, 7, 4, 6, 5] 라 가정합니다. maxNum 은 i - 2 까지 더해졌던 .. 2020. 4. 5.
728x90
반응형