전체 글 35

백준 2331번 반복수열 풀이

이번 문제는 dfs탐색과 유사한 반복수열에 관한 문제입니다. 문제의 링크는 그림 밑 주소로 가시면 됩니다. *정답 소스코드 이번 문제는 while문을 이용한 반복문으로 구현해 보았습니다. pow 함수는 각자리수의 제곱을 구하는 함수, calc는 각자리수를 구해 총 합을 구하는 함수입니다. 수열이 continue되면서 전에 나왔던 숫자를 알아채는 방법은 check배열을 이용한 확인입니다. 이 문제의 중요한 포인트는 반복수열의 첫 번째 숫자위치를 알아내는 것인데, 이는 check배열에 처음부터 index, 즉 숫자의 위치를 저장해 (위에서는 i), 수열이 반복될 시에 위치를 반환하는 함수를 구현해 만들었습니다. loop의 while문은 check를 이용해 숫자가 다시 나타날 때까지 반복해줍니다.

카테고리 없음 2019.07.06

깊이 우선 탐색. DFS. Depth First Search.

그래프의 탐색 방법 중에는 크게 깊이우선 탐색(DFS)와 너비 우선 탐색(BFS)가 있다. 이 탐색 방법들의 목적은 모든 정점을 1번씩 방문하는 것이다. DFS는 최대한 깊숙히 탐색. BFS는 최대한 넓게 탐색한다. DFS는 스택을 이용하고 BFS는 큐를 이용한다. BFS는 모든 간선의 가중치가 1일 때 최단거리를 탐색하는 알고리즘이 된다. *DFS check[i] =1 or 0 을 사용해 방문 여부를 저장한다. 시간복잡도는 인접행렬을 사용했을 때는 O(V^2), 인접리스트를 사용하면 O(V+E)이다. *BFS 시간복잡도 인접행렬 : O(V^2) 리스트: O(V+E)

C++ 간단한 버블 소트 (Bubble Sort) 배우기

버블 소트(Bubble sort)는 비록 O(n^2)급의 시간복잡도를 가지고 있지만 정말 간단한 코드를 가지고 있어 heavy-load(무거운 작업)이 아닌 이상 간단히 쓰일 수 있다. 정렬 방식이 마치 거품이 떠오르는 것과 유사하다 하여 붙여진 이름 "bubble sort". 위 예제에서는 샘플의 크기가 n=8인 자료를 정렬한다. i가 룹을 한 번 돌 때마다 j는 0부터 n-i까지 룹을 도는데, n-i까지 지정해 준 이유는, 오름차순의 경우, 밖의 룹이 한 번 돌 때마다 n-i까지는 정렬이 완료되어서 더 이상 불필요하기 때문이다. 정렬 방식은 j의 interation이 돌면서 바로 다음 index값과 비교/swap하는 방식이다. 여기서 change는 정렬이 완료되었을 때 더 이상 작업반복을 하지 않기 ..

"%", 모듈러, modulo의 성질

C/C++언어에서는 "나머지 연산", 모듈러가 존재하는데 "%"기호를 사용한다. 예를 들면, 5%2 --> 1 6%3 --> 0 이다. 허나 주의해야할 점은 음수가 들어갈 때인데, 모듈러 앞에 오는 수의 기호를 따른다 보면 된다. ex) -4%3 --> -1 4%3 --> 1 4%-3 --> 1 -4%-3 --> -1 나눗셈을 연산해보면, ex) -4/3 --> -1 4/3 --> 1 4/-3 --> -1 -4/-3 --> 1 로 정의가 되어있다. 그러므로 식들을 합치면, -4 = 3*(-1) + (-1) 4 = 3*(1) + 1 4 = (-3)*(-1) + 1 -4 = (-3)*(1) + (-1) 으로 위 정의들과 맞게 떨어지는 것을 볼 수 있다.