'Program Lang.'에 해당되는 글 72건

  1. 2017.11.23 다익스트라(Dijkstra) 알고리즘 - 힙사용하지 않을 경우
  2. 2017.11.20 최소 신장 트리 - 프림(Prim) 알고리즘
  3. 2017.11.06 위상정렬 (Topological Sort) - Indegree
  4. 2017.10.26 1로 만들기
  5. 2017.10.25 계단오르기
  6. 2017.10.25 숫자삼각형 문제풀이
  7. 2017.10.22 RGB 거리
  8. 2017.10.22 요일 구하기
  9. 2017.10.19 ZigZag Scan
  10. 2017.10.12 오픈튜토리얼 문제 풀기 - 나머지 연산 및 정렬

다익스트라(Dijkstra) 알고리즘 - 힙사용하지 않을 경우

Program Lang./Algorithm 2017. 11. 23. 10:38

1. 소스 코드

아래 블로그에 관련 내용은 잘 정리되어 있어서 따라 해 보았다.

메뉴를 만들어서 각 단계별로 동작을 확인하는 메뉴로 각 단계별 동작을 확인하였다.

좀 더 수식적으로 접근하는 블로그를 보았던 것 같은데, 수식적으로 각 단계별로 최소값을 노드로 선택해서 이동 시

출발 노드에서 각 노드간 길이가 최소가 되는지 의문이긴 하다. 수식으로 증명하는 부분을 봤으면 한다.


http://hsp1116.tistory.com/42



2. 실행 결과

각 메뉴별 실행 결과.



heesoon.kim@LGEBIDRNDPT04:~/personal/test4$ ./test

=====================================================

1. Display Graph

2. Display Final Result

3. Display Intermediate Result

4. Display Paths

0. Exit

=====================================================

 >> 1


Vertex : [1] -> 3-> 4

Vertex : [2] -> 1

Vertex : [3] -> 4

Vertex : [4] -> 2-> 3

Vertex : [5] -> 2-> 4


=====================================================

1. Display Graph

2. Display Final Result

3. Display Intermediate Result

4. Display Paths

0. Exit

=====================================================

 >> 2


6 3 3 2 0

=====================================================

1. Display Graph

2. Display Final Result

3. Display Intermediate Result

4. Display Paths

0. Exit

=====================================================

 >> 3


 1] INF INF INF INF   0

 2] INF   4 INF   2   0

 3] INF   3   3   2   0

 4]   6   3   3   2   0

 5]   6   3   3   2   0


=====================================================

1. Display Graph

2. Display Final Result

3. Display Intermediate Result

4. Display Paths

0. Exit

=====================================================

 >> 4


1 까지 경로(distance = 6) : 1 <- 2 <- 4 <- 5

2 까지 경로(distance = 3) : 2 <- 4 <- 5

3 까지 경로(distance = 3) : 3 <- 4 <- 5

4 까지 경로(distance = 2) : 4 <- 5

5 까지 경로(distance = 0) : 5

=====================================================

1. Display Graph

2. Display Final Result

3. Display Intermediate Result

4. Display Paths

0. Exit

=====================================================

 >>


'Program Lang. > Algorithm' 카테고리의 다른 글

카라츠바 (Karatsuba) - Python  (0) 2023.02.19
최소 신장 트리 - 프림(Prim) 알고리즘  (0) 2017.11.20
위상정렬 (Topological Sort) - Indegree  (0) 2017.11.06
1로 만들기  (0) 2017.10.26
계단오르기  (0) 2017.10.25
:

최소 신장 트리 - 프림(Prim) 알고리즘

Program Lang./Algorithm 2017. 11. 20. 14:04

1. 소스 코드

아래 블로그의 설명과 그림을 참조하여 최소 신장 트리 알고리즘 중에 하나인 프림 알고리즘을 구현해 보았다.

우선 순위 큐를 기반으로 구현하였으며, 결과적으로 다른 블로그의 예제와 유사해 보인다.


전체적으로 이해한 바로는 그래프를 너비 우선 순위로 탐색하는 것과 유사하게 구현 뼈대를 가져가고,

단지 Queue에 넣을 때는 일반 Queue가 아닌 우선 순위 큐를 사용하다는 점에 착안하여 구현하는 방향으로

구현해야 한다.


http://swlock.blogspot.kr/2016/02/prim-mstminimum-spanning-tree.html



[직관적인 코드] 
우선 순위 큐를 사용하지 않고 직관적으로 구현했을 때.



2. 실행 결과


D -> A [5]
D -> F [6]
A -> B [7]
B -> E [7]
E -> C [5]
E -> G [9]


:

위상정렬 (Topological Sort) - Indegree

Program Lang./Algorithm 2017. 11. 6. 15:27

1. 소스 코드

http://www.playsw.or.kr/repo/cast/110 그림을 참조하여 위상정렬을 해 보았다.

상세 알고리즘 동작은 위 블로그를 참조함.



2. 실행 결과


컴퓨터공학입문 논리회로 어셈블러 자료구조 컴퓨터구조 데이터베이스 시스템프로그램밍 알고리즘 네트워크 운영체제


:

1로 만들기

Program Lang./Algorithm 2017. 10. 26. 19:36

1. 소스 코드

백준 https://www.acmicpc.net/problem/1463 문제 정리.

이 문제를 처음 접하는 순간 아무 생각이 들지 않았다. 나는 왜 이리 멍청할까 정도만 생각이 들지

모든 문제를 해결하기 위해서 먼저 완전탐색부터 고민하면서 속도 개선을 위해서 하나 하나 개선해 가는 식으로 여기에 정리한다. 참고로 여러 사람들이 해 놓은 코드를 참조하였다.

아래 코드는 완전 탐색으로 구현한 내용이다.



2. DP 코드

dp[n] = f(n-1) + 1로 완전탐색 루틴에서 가장 왼쪽 노드의 값에서 차례되로 dp[n]값을 구하고 f(n/2) 또는 f(n/3)에서 그 값이 더 작으면 dp[n]을 update하는 식으로 처리하면서 최종값을 얻는다.
결론적으로 위 완전 탐색에서 f함수 두번째 매개변수 처리를 dp배열로 어떻게 처리하느냐가 관건으로 보인다.


결론적으로 재귀함수 호출을 모두 제거하면 아래와 같은 코드로 완성할 수 있다.
위의 재귀함수 호출 코드를 하나하나 따라가 보면 결국 재귀함수 호출 내에서 DP값이 모두 구해져 있어서
DP값으로 재귀함수 변환값은 대체된다. 이를 통해서 재귀호출 구문은 아래처럼 모두 없앨 수 있다.


'Program Lang. > Algorithm' 카테고리의 다른 글

최소 신장 트리 - 프림(Prim) 알고리즘  (0) 2017.11.20
위상정렬 (Topological Sort) - Indegree  (0) 2017.11.06
계단오르기  (0) 2017.10.25
숫자삼각형 문제풀이  (0) 2017.10.25
RGB 거리  (0) 2017.10.22
:

계단오르기

Program Lang./Algorithm 2017. 10. 25. 16:53

1. 소스 코드

백준 https://www.acmicpc.net/problem/2579 문제 정리. 

아래 코드는 완전 탐색으로 구현해 보았다. 완전 탐색도 조건이 계단 오르기 전과 오른 후에 연속해서 한 계단씩 오르는 조건이 달라서 코드가 지저분해졌다. 맞게 구현했는지도 솔직히 모르겠다. 두 가지 가능성에 대해서 TC로 돌려봤는데 생각하는데로 나오기는 했는데.


[완전 탐색]



2. DP 코드

처음에는 완전 탐색에서 더 탐색하지 않아도 되는 가지를 쳐 낼려고 했는데, 아무리 노력해도 되지 않아서 풀이를 찾기 시작했다. 풀이나 코드를 보고도 이해가 잘 안되었는데, 딱 이해를 할 수 있도록 정리하신 분이 있다.

따라서 아래 링크를 걸어 둔다.


[DP Code]



[출처] http://kwanghyuk.tistory.com/4

'Program Lang. > Algorithm' 카테고리의 다른 글

위상정렬 (Topological Sort) - Indegree  (0) 2017.11.06
1로 만들기  (0) 2017.10.26
숫자삼각형 문제풀이  (0) 2017.10.25
RGB 거리  (0) 2017.10.22
요일 구하기  (0) 2017.10.22
:

숫자삼각형 문제풀이

Program Lang./Algorithm 2017. 10. 25. 15:38

1. 소스 코드

백준 https://www.acmicpc.net/problem/1932 문제 정리. 

처음에는 Tree로 착각해서 Tree를 배열로 변환해서 처리하는 Heap 구조를 많이 생각했는데, 이상한 쪽으로 빠져서 해메다가 다른 분들이 푼 풀이를 보고 나름 정리했다.

입력을 받으면서 처리하도록 하여 메모리 사용을 최소화했다.



2. 동작

정상동작

'Program Lang. > Algorithm' 카테고리의 다른 글

1로 만들기  (0) 2017.10.26
계단오르기  (0) 2017.10.25
RGB 거리  (0) 2017.10.22
요일 구하기  (0) 2017.10.22
ZigZag Scan  (0) 2017.10.19
:

RGB 거리

Program Lang./Algorithm 2017. 10. 22. 17:07

1. 소스 코드

백준 https://www.acmicpc.net/problem/1149 문제 정리. 완전 탐색으로 풀었을 때, 비교하나 잘 못해서 3일동안 뻘짓.

다행히 고마우신 분이 힌트를 주어서 해결. DP 문제라고 구지 분류하니까 너무 복잡하게 생각했는데 단순하게

생각하면 이해하기 어렵진 않았다.


완전 탐색 시에는 O(N^2)의 복잡도와 메모리는 문제에서 데이터 입력량만큼 늘어난다. 하지만 완전 탐색이 아닌 접근법으로 구현 시에는 복잡도는 O(N)으로 보이고 메모리는 데이터 입력량에 Constant이다.


[완전탐색]



[일반적인 내 수준에서 풀이 시]



2. 실행결과

두 개 백준 사이트에서 돌렸을 때, 잘 동작하였다.

'Program Lang. > Algorithm' 카테고리의 다른 글

계단오르기  (0) 2017.10.25
숫자삼각형 문제풀이  (0) 2017.10.25
요일 구하기  (0) 2017.10.22
ZigZag Scan  (0) 2017.10.19
오픈튜토리얼 문제 풀기 - 나머지 연산 및 정렬  (0) 2017.10.12
:

요일 구하기

Program Lang./Algorithm 2017. 10. 22. 13:57

1. 소스 코드

백준 https://www.acmicpc.net/problem/1924 문제로 규칙 찾기 중에서 2007년도 특정 월/일에 대해서 요일을 출력하는 문제. 계속 틀려서 달력도 출력해 보았다. 구글 출제 문제에 외계 행성의 달력 찍기 문제가 있어서 여기에 정리하면 유사 문제 출제 시 다시 Remind할 수 있을 것 같다.



2. 실행결과

달력 찍고, 특정 월/일에 대한 요일 출력. 가장 왼쪽이 일요일이면 완벽한 달력인데, 아쉽게도 가장 왼쪽이 월요일이다.

이 정도에서 마무리한다.


 ------ 1 월 -------

 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


 ------ 2 월 -------

          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


~~ 중략


 ------ 12 월 -------

                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

12 2

SUN



'Program Lang. > Algorithm' 카테고리의 다른 글

숫자삼각형 문제풀이  (0) 2017.10.25
RGB 거리  (0) 2017.10.22
ZigZag Scan  (0) 2017.10.19
오픈튜토리얼 문제 풀기 - 나머지 연산 및 정렬  (0) 2017.10.12
[C] Graph DFS Study (재귀, 스택기반)  (0) 2017.10.11
:

ZigZag Scan

Program Lang./Algorithm 2017. 10. 19. 12:31

1. 소스 코드

ZigZag Scan은 MPEG에서 DCT 후에 수행되는 매우 중요한 동작 중에 하나이다. 대학원에 있을 때, 

교수님이 과제를 내 주었던 것 같은데, 남이 해 놓은 거 배껴서 냈는데 이제 해 보려니 잘 안되네.

해보게 된 동기는 https://www.acmicpc.net/problem/1193 <분수찾기> 문제를 풀다보니 의욕이 생겼다.

다음 블로그를 보니 잘 짜 놓은 신듯 http://kama1204.tistory.com/m/112

다만 위의 블로그의 대략적인 복자도는 O(N^2) 인 것으로 보인다. 아래 내가 짠 소스는 어찌하다 보니

O(N)으로 만들어진 것 같다.



2. 실행결과

3X3 행렬에 대한 동작이다. 다른 값에 대해서도 잘 동작한다.

대만에서 쓴 논문을 보니 ZigZag Scan을 FPG로 속도 개선하기 위해서 쓴 논문도 있었던 것 같다.


 1  2  6 

 3  5  7 

 4  8  9 

3. 소스 코드

달팽이 Scan도 도전해 보았다.



4. 실행결과


 1  2  3  4  5 

16 17 18 19  6 

15 24 25 20  7 

14 23 22 21  8 

13 12 11 10  9 


'Program Lang. > Algorithm' 카테고리의 다른 글

RGB 거리  (0) 2017.10.22
요일 구하기  (0) 2017.10.22
오픈튜토리얼 문제 풀기 - 나머지 연산 및 정렬  (0) 2017.10.12
[C] Graph DFS Study (재귀, 스택기반)  (0) 2017.10.11
경찰차 - 사건처리 최소 거리  (0) 2017.06.18
:

오픈튜토리얼 문제 풀기 - 나머지 연산 및 정렬

Program Lang./Algorithm 2017. 10. 12. 19:28

1. 문제


[설명]

0 살 이상 99살 이하의 사람들의 나이가 주어질 때, 이를 오름차순으로 정렬하는 프로그램을 작성하라.


[입력]

입력의 첫 줄에는 테스트 케이스의 개수 T가 입력된다.

각 테스트 케이스는 한줄로 이뤄지며, 자연수  자연수 N(1 ≤ N ≤ 2, 000, 000)X1(0 ≤ X1 ≤ 99)P(1 ≤ P ≤ N)가 차례대로 입력된다.

i(i>1) 번째 사람의 나이는 xi = (xi-1*11 + 97) mod 100 이다.


[출력]

각 테스트 케이스에 대해 한줄에 오름차순으로 P번째인 사람의 나이를 출력한다.


                         Sample Input 

                  Sample Output

 2

 5 1 5

 7 9 3

 85

 53


원소스 : http://judge.lavida.us/problem.php?id=2103


2. 설명

단순하게 생각했는데 내부적으로 고려해야 할 사항이 많다. 나머지 연산자의 특성을 모르면 함정에 빠질 수 있다.

처음에는 P번째 값을 구하라고 해서 단순히 P번째 값만 구했는데 나머지 연산 결과에 대한 특성을 파악하지 못했다. 


3. 코드

일단 재귀 호출로 성능 무시하고 구현하면 아래와 같다. STL을 사용하여 구현을 하였다.



재귀 호출 함수를 없애고 성능을 개선하는 코드로 바꾸려면 아래 코드를 쓰면 빠르지 않을까 쉽다.


4. 실행 결과


Start
85
53
Finish


'Program Lang. > Algorithm' 카테고리의 다른 글

요일 구하기  (0) 2017.10.22
ZigZag Scan  (0) 2017.10.19
[C] Graph DFS Study (재귀, 스택기반)  (0) 2017.10.11
경찰차 - 사건처리 최소 거리  (0) 2017.06.18
미로 찾기 예제 풀이  (0) 2017.05.31
: