'Program Lang./Algorithm'에 해당되는 글 18건

  1. 2017.10.12 오픈튜토리얼 문제 풀기 - 나머지 연산 및 정렬
  2. 2017.10.11 [C] Graph DFS Study (재귀, 스택기반)
  3. 2017.06.18 경찰차 - 사건처리 최소 거리
  4. 2017.05.31 미로 찾기 예제 풀이
  5. 2017.05.31 두더지 굴 탐색 예제 - 너비 우선 탐색 기반 (BFS)
  6. 2017.05.31 너비우선탐색 기반 최단 거리 예제 풀이
  7. 2017.05.31 깊이우선 탐색(depth first search) 기반 최단 거리 예제 풀이
  8. 2017.03.12 두더지 굴(S) - 탐색기반 알고리즘 설계 중급 - 깊이우선탐색 기반

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

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
:

[C] Graph DFS Study (재귀, 스택기반)

Program Lang./Algorithm 2017. 10. 11. 16:19

1. 설명

그래프에 대해서 깊이 우선 순위 구현 및 차 후에 다시 보기 위해서 여기에 남김.

깊이 우선 순위 구현은 재귀호출 기반과 스택 자료 구조를 이용해서 각각 구현해 보았다. C++ STL 버전은 아직 올리지 않았지만 STL기반으로 구현하면 정말 깔끔하다.


2. 소스 코드

Gist에서 관리한다.




3. 실행결과


1. 현재 그래프 출력

2. 재귀호출에 의한 깊이 우선 탐색

3. 스택에 의한 깊이 우선 탐색

0. 종료

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

 >> 1


고속도로 망의 인접 리스트

정점 서울의 인접 리스트 -> 대전 -> 춘천

정점 대전의 인접 리스트 -> 서울 -> 대구 -> 전주

정점 춘천의 인접 리스트 -> 서울 -> 대구

정점 대구의 인접 리스트 -> 대전 -> 춘천 -> 부산

정점 전주의 인접 리스트 -> 대전 -> 광주

정점 부산의 인접 리스트 -> 대구 -> 광주

정점 광주의 인접 리스트 -> 전주 -> 부산

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

1. 현재 그래프 출력

2. 재귀호출에 의한 깊이 우선 탐색

3. 스택에 의한 깊이 우선 탐색

0. 종료

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

 >> 2


깊이 우선 탐색 결과 : 서울 대전 대구 춘천 부산 광주 전주

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

1. 현재 그래프 출력

2. 재귀호출에 의한 깊이 우선 탐색

3. 스택에 의한 깊이 우선 탐색

0. 종료

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

 >> 3


깊이 우선 탐색 결과 : 서울 대전 대구 춘천 부산 광주 전주

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

1. 현재 그래프 출력

2. 재귀호출에 의한 깊이 우선 탐색

3. 스택에 의한 깊이 우선 탐색

0. 종료

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

 >> 0


:

경찰차 - 사건처리 최소 거리

Program Lang./Algorithm 2017. 6. 18. 10:09

1. 소스 코드

문제해결을 위한 창의적 알고리즘(중급) 예제 문제, 복습 목적

하위 트리 전개는 사건을 기준으로 한다. 경찰차 위치가 하나의 처리된 사건으로 가정하고 다음 사건을 정의하는 부분을 주의 깊게 보자


:

미로 찾기 예제 풀이

Program Lang./Algorithm 2017. 5. 31. 14:09

1. 소스 코드

문제해결을 위한 창의적 알고리즘(중급), 100페이지 4문제로 미로가 주워지고 'S'에서 출발해서 'G'로 끝나점까지의 최단 거리를 찾는 문제이다. 기존에 두더지 문제를 잘 풀었다면 어렵지 않게 해결할 수 있다.

문제 해결은 깊이 우선 또는 너비 우선 순위로 해결할 수 있지만 너비 우선 순위로 풀어 보았다.



2. 실행 결과


find road : 6 

# S # # # 
# - - - # 
# - # - # 
# - - - - 
# # # G # 

최단 거리 : 6 


:

두더지 굴 탐색 예제 - 너비 우선 탐색 기반 (BFS)

Program Lang./Algorithm 2017. 5. 31. 14:01

1. 소스 코드

문제해결을 위한 창의적 알고리즘(중급), 77페이지 문제에 있는 문제로 두더지 굴이 몇 개 있으며, 각 두더지 굴의 깊이를 출력하는 문제이다.



2. 실행 결과


 0  2  2  0  3  0  0 
 0  2  2  0  3  0  3 
 2  2  2  0  3  0  3 
 0  0  0  0  3  3  3 
 0  4  0  0  0  0  0 
 0  4  4  4  4  4  0 
 0  4  4  4  0  0  0 

두더지 굴 개수 : 3
7 8 9 


:

너비우선탐색 기반 최단 거리 예제 풀이

Program Lang./Algorithm 2017. 5. 31. 13:41

1. 목적

공부한 내용 다음에 다시 복습하기 위해서 여기에 정리. 알고리즘 동작 원리는 설명은 생략.

여기 (http://blog.eairship.kr/268) 블로그에 정리된 내용 중에 최단 거리 탐색 문제를 내 나름되로 짜 봤다.


2. 코드 설명

너비 우선 탐색 기반은 비선형 탐색의 한 종류로 Queue 기반으로 Stack 기반의 깊이기반 탐색에서 10만번 이상을 수행 시에 Stack Overflow에 대한 제약 사항을 해결할 수 있는 하나의 방식이다.



3. 실행 결과

깊이 우선 순위 탐색과 달리 Path가 나눠져서 도달하지는 않는다.


end of map : min = 12 
-1 -1 -1 -1 -1 
 0  0  0  0 -1 
-1 -1 -1 -1 -1 
-1  0 -1  0  0 
-1 -1 -1 -1 -1 

최단거리 : 12 


:

깊이우선 탐색(depth first search) 기반 최단 거리 예제 풀이

Program Lang./Algorithm 2017. 5. 31. 10:06

1. 목적

공부한 내용 다음에 다시 복습하기 위해서 여기에 정리. 알고리즘 동작 원리는 설명은 생략.

여기 (http://blog.eairship.kr/268) 블로그에 정리된 내용 중에 최단 거리 탐색 문제를 내 나름되로 짜 봤다.


2. 코드 설명

깊이 우선 탐색 기반은 Stack 기반이고, 기존에 방문한 Node에 대해서 원하는 답을 얻지 못할 경우 다시 현재 Node 전의 Node로 이동해야 하는데 이 때 현재 Node 탐색에 사용된 중간 결과는 모두 원래되로 돌려줘야 한다. Back Tracking 기반이라는 의미로 해석된다. 흔히 운영체제나 이런 곳에서 Stack 되감기 이런 말을 들을 수 있는데 이 문제에서 많은 영감을 얻을 수 있다.



3. 실행 결과

결론적으로 두 가지 Path로 종점에 도달하였고, 그 중 최소값을 선택하는 문제이다.


end of loop .. distance : 16 
end of loop .. distance : 12 

최단거리 : 12 


:

두더지 굴(S) - 탐색기반 알고리즘 설계 중급 - 깊이우선탐색 기반

Program Lang./Algorithm 2017. 3. 12. 15:43

1. 소스 코드

문제해결을 위한 창의적 알고리즘(중급), 77페이지 문제에 있는 문제로 두더지 굴이 몇 개 있으며, 각 두더지 굴의 깊이를 출력하는 문제이다.



2. 실행 결과



: