전체 글
-
백준(BOJ) 3020번 개똥벌레알고리즘 풀이/백준(Boj) 2019. 8. 22. 17:10
문제 : https://www.acmicpc.net/problem/3020 문제개똥벌레 한 마리가 장애물(석순과 종유석)로 가득찬 동굴에 들어갔다. 동굴의 길이는 N미터이고, 높이는 H미터이다. (N은 짝수) 첫 번째 장애물은 항상 석순이고, 그 다음에는 종유석과 석순이 번갈아가면서 등장한다.아래 그림은 길이가 14미터이고 높이가 5미터인 동굴이다. (예제 그림)이 개똥벌레는 장애물을 피하지 않는다. 자신이 지나갈 구간을 정한 다음 일직선으로 지나가면서 만나는 모든 장애물을 파괴한다.위의 그림에서 4번째 구간으로 개똥벌레가 날아간다면 파괴해야하는 장애물의 수는 총 여덟개이다. (4번째 구간은 길이가 3인 석순과 길이가 4인 석순의 중간지점을 말한다)하지만, 첫 번째 구간이나 다섯 번째 구간으로 날아간다면..
-
백준(BOJ) 10828번 스택알고리즘 풀이/백준(Boj) 2019. 8. 18. 19:36
문제 : https://www.acmicpc.net/problem/10828 문제정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오.명령은 총 다섯 가지이다.push X: 정수 X를 스택에 넣는 연산이다.pop: 스택에서 가장 위에 있는 정수를 빼고, 그 수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다.size: 스택에 들어있는 정수의 개수를 출력한다.empty: 스택이 비어있으면 1, 아니면 0을 출력한다.top: 스택의 가장 위에 있는 정수를 출력한다. 만약 스택에 들어있는 정수가 없는 경우에는 -1을 출력한다. 나의 풀이: 스택의 성질인 FILO 을 기억하면서 풀어주면 되겠다. top을 -1로 두고 push일때는 증가, pop일때는..
-
백준(BOJ) 1991번 트리 순회알고리즘 풀이/백준(Boj) 2019. 8. 18. 18:28
문제: https://www.acmicpc.net/problem/1991 문제이진 트리를 입력받아 전위 순회(preorder traversal), 중위 순회(inorder traversal), 후위 순회(postorder traversal)한 결과를 출력하는 프로그램을 작성하시오.예를 들어 위와 같은 이진 트리가 입력되면,전위 순회한 결과 : ABDCEFG // (루트) (왼쪽 자식) (오른쪽 자식)중위 순회한 결과 : DBAECFG // (왼쪽 자식) (루트) (오른쪽 자식)후위 순회한 결과 : DBEGFCA // (왼쪽 자식) (오른쪽 자식) (루트)가 된다. 나의 풀이:입력에 항상 A가 루트 노드가 된다라는 조건이 있기 때문에 따로 루트 노드를 구할 필요가 없는 문제였다. 배열을 만들어서 A- Z를..
-
백준(BOJ) 2644번 촌수계산알고리즘 풀이/백준(Boj) 2019. 8. 18. 02:42
문제 : https://www.acmicpc.net/problem/2644 문제우리 나라는 가족 혹은 친척들 사이의 관계를 촌수라는 단위로 표현하는 독특한 문화를 가지고 있다. 이러한 촌수는 다음과 같은 방식으로 계산된다. 기본적으로 부모와 자식 사이를 1촌으로 정의하고 이로부터 사람들 간의 촌수를 계산한다. 예를 들면 나와 아버지, 아버지와 할아버지는 각각 1촌으로 나와 할아버지는 2촌이 되고, 아버지 형제들과 할아버지는 1촌, 나와 아버지 형제들과는 3촌이 된다.여러 사람들에 대한 부모 자식들 간의 관계가 주어졌을 때, 주어진 두 사람의 촌수를 계산하는 프로그램을 작성하시오. 나의 풀이: 구하고자 하는 촌수 두사람을 child 와 parent 라고 두자. child의 인접한 사람을 처음 발견한 상태 ..
-
플로이드 알고리즘알고리즘 이론/알고리즘 구현 2019. 8. 18. 01:28
모든 정점에서 모든 정점으로의 최단 경로를 구하고 싶다면 플로이드 알고리즘을 사용하자. 코드 ( C++ )// 플로이드 알고리즘으로 최단 거리와 최단 경로를 구해 보자.#include #include #include #include using namespace std;const int MAX = 100;// 그래프의 인접 행렬 표현// adj[u][v] = u 에서 v로 가는 간선의 가중치. 간선이 없으면 아주 큰 값을 넣는다.int adj[MAX][MAX];// via[u][v] = u에서 v까지 가는 최단 경로가 경유하는 점 중 가장 번호가 큰 정점int via[MAX][MAX];// 정점의 개수int V;// 플로이드의 모든 쌍 최단 거리 알고리즘void floyd(){for (int i = 0; ..
-
CPU 동작 LOAD, ADD, STORE운영체제/컴퓨터구조 2019. 8. 17. 18:53
1. 프로그램 카운터 라는 레지스터에 프로그램의 첫번째 명령어가 어느 주소에 들어있는지 넣는다. 운영체제가 프로그램 읽어온 후 여기서 부터가 프로그램이니 CPU에게 알려주는 것 시작점을 던져준 것 2. 메모리 주소 레지스터에 옮겨간다. 그 후 메모리 주소 레지스터에 있는 주소에 접근을 하여 LOAD 10을 가져와서 메모리 데이터 레지스터에 들어간다. ( 제어 장치가 관리 ) 3. 메모리 데이터 레지스터가 읽어온 것은 명령어 이다. 명령어 라는 것을 알고 있으니 명령어 레지스터로 옮겨준다 그 후 프로그램 카운터는 +1 된다. 다음 번에 읽어올 명령어가 존재하는 메모리 주소를 가지고 있어야 하기 때문에 명령어 레지스터 실행전에 가져 오는 것 4. 명령어 레지스터에 있는 명령어가 제어장치로 들어간다. 그 후 ..
-
백준(BOJ) 1707번 이분 그래프알고리즘 풀이/백준(Boj) 2019. 8. 17. 16:29
문제 : https://www.acmicpc.net/problem/1707 문제그래프의 정점의 집합을 둘로 분할하여, 각 집합에 속한 정점끼리는 서로 인접하지 않도록 분할할 수 있을 때, 그러한 그래프를 특별히 이분 그래프 (Bipartite Graph) 라 부른다.그래프가 입력으로 주어졌을 때, 이 그래프가 이분 그래프인지 아닌지 판별하는 프로그램을 작성하시오. 나의 풀이: 이분 그래프가 되려면 DFS를 했을 시 현재 노드가 0 이라면 인접한 노드들은 1이여야 한다. 따라서 biGraph 배열을 추가로 하나 만들어서 한 노드의 인접한 노드들은 1 - (현재노드의 Bi값) 로 정의해줌으로써 현재 노드의 biGraph 값이 0 이라면 인접한 노드들은1을 1이라면 0을 반환하도록 해 주자 기존 DFS와 동일..
-
CPU와 RAM 동작운영체제/컴퓨터구조 2019. 8. 16. 23:15
system bus : address bus, control bus , data bus Address bus 는 단방향 Data bus는 양방향 데이터를 요청할때 CPU가 데이터를 요청하면 address bus : 어느 주소에 있는 control bus : 데이터를 보내달라 data bus : 데이터를 cpu로 보냄 데이터를 저장할때 address bus : 어느 주소에 control bus : 내가 보낼 데이터 저장해라 data bus : 데이터 RAM으로 보냄 출저 : https://www.youtube.com/watch?v=cNN_tTXABUA