목록알고리즘 (32)
이우의 개발일지

SWEA 1859번 백만 장자 프로젝트 문제 SWEA 1859 백만 장자 프로젝트 입/ 출력 및 예제 풀이 백만 장자 프로젝트를 보면 결국에는 입력된 모든 수를 알고 그 수의 max 값을 안 다음에 그 max값에 그 앞의 수들을 뺀 값을 result에 더 해주면 된다. 만약 max 값이 5이고, 그 앞의 값들이 3, 4 라면result + = 5 - 3;result += 5 - 4;이런 식으로 값을 추가해줘서 총 최대 이득을 뽑으면 된다. 하지만, 1 1 4 1 3 처럼 중간에 큰 max 값이 나오고, 마지막에 3 같은 다음 max 값이 나온다면 4의 max 값 뒤로 다시 max 값을 지정해줘야 한다. while (point max) { max = list[num][i]; max_num..

백준 15650번 N과 M(2) 풀이 N과 M (2) 설명백트래킹은 완전 탐색과 비슷하게 하나하나 다 경우를 따져보는 알고리즘이다.일반적으로 다 따져보기 때문에 경우의 수가 큰 문제는 적용할 수 없다. 보통 재귀함수를 섞어서 쓰기 때문에 선행적으로 재귀에 대한 이해가 필요하다. 이 문제에서 볼 때 조건은 아래와 같이 2가지이다.조건 1. N개의 자연수를 M 개씩 나열한다.조건 2. 오름차순으로 나열한다. 조건 1을 따져보면 n개와 m개를 입력받고 재귀함수 안에서 m개의 조건을 충족하면 출력한다.bool issu[9];int list[9];int num = 0;int n, m;void func(int a) { if (num == m) { for (int i = 1; i i) continue; el..

백준 1260번 BFS와 DFS BFS와 DFS 풀이이 문제는 생각보다 까다로울 수 있는데, 일반적인 BFS와 DFS 구현에서 추가로 조건이 다음과 같이 붙는다. 조건 1. 방문할 수 있는 정점이 여러 개인 경우에는 정점 번호가 작은 것을 먼저 방문한다.조건 2. DFS와 BFS 동시에 구현하기 조건 3. 들어간 순서대로 출력하기 BFSvoid Bfs(int start) { Q.push(start); vis_b[start] = 1; cout 먼저, BFS를 보면 일반적인 구현방식과 동일한데 중간에 sort 함수가 보일 것이다. 간선의 개수가 최대 10,000개까지 가능해서 처음에 이중 for문을 시도했다가 시간초과가 뜨는 쓴 맛을 봤다... ㅋㅋ 이중 for문에 시간복잡도는 O(n^2) 이고 내가 현재..