본문 바로가기
728x90

전체 글139

[알고리즘] Day3 - 1260번 DFS와 BFS 00 문제 01 DFS 알고리즘?Depth First Search, 깊이 우선 탐색이라는 뜻.하나의 노드에서 시작하여 마지막 지점까지 계속 탐색하는 행동을 하는 알고리즘즉, 시작점을 기준으로 가장 아래까지 이동하면서 탐색하는 방식 -> 스택을 이용하여 푸는 방식스택에 값을 넣어주고, 그 값을 통해 확인하며 종료 조건은 스택이 비어있을 때이다.DFS의 장점은 깊은 곳에 있을수록 빨리 찾아낼 수 있다는 점단점은 자칫하면 overflow가 날 수도 있고, 얻어진 해가 최단 거리라는 보장이 없다. 02 DFS 알고리즘 구현 방식인접한 노드들을 표현하기 위해 NxN 크기의 adj_mat 배열과 방문한 노드를 표현하기 위해 Nx1 크기의 visited 배열을 사용한다. add_matrix 함수에서 연결된 노드를 입.. 2018. 8. 8.
[알고리즘] Day2 - 2750번 수 정렬하기 01 문제 02 알고리즘삽입정렬과 버블정렬에 대하여 오름차순 정렬을 했다. 03 코드 1_ sort.h void insertion_sort(int N, int *num);void bubble_sort(int N, int *num);void print_num(int N, int *num); void insertion_sort(int N, int *num){ int i, j; for (i = 1; i = 0; j--) { if (num[key] 2018. 8. 4.
[알고리즘] Day2 - 2775번 부녀회장이 될테야 01 문제 02 알고리즘0층, 1층, 2층 … 에 대해 규칙을 찾았다. 0층은 i호 일 때, i명이 살기 때문에 따로 값을 넣어주었고 1층 이후부터는 현재 층 - 1층의 인원을 반복문으로 계산해서 값을 넣어주었다. 03 코드 #include "stdafx.h" int main(void){ int i, j, jj; int T, k, n; int residents[15][15] = { 0, }; // Test case T scanf_s("%d", &T); while (T>0) { // 1 2 3 // 1 3 6 // 1 4 10 printf("# Test case %d\n", T); scanf_s("%d", &k); scanf_s("%d", &n); // init zero floor printf("0 층 :.. 2018. 8. 4.
[알고리즘] Day1 - 괄호 01 문제 02 알고리즘입력된 문자열을 스택에 push, pop 하면서 괄호의 짝이 맞는지 확인한다. 문자열에서 ‘(‘ 일 때 push한 횟수와 ‘)’일 때 pop한 횟수가 같아야 한다. is_empty 함수를 이용해 push한 게 다 pop 되었는지 비교하는데, pop을 더 많이 하는 경우도 고려해주어야 하므로 stack에서 pop할 요소가 없을 경우에 vps = -1로 해주고, 이 값이 초기값과 같은지 비교함. 03 코드 #include #include #include #define LEN 100 typedef struct array_stack{ int arr[LEN]; int top;}array_stack; void stack_init(array_stack *pstack);void push(arra.. 2018. 8. 4.
[알고리즘] Day1 - 스택 01 문제 02 알고리즘 - stack의 기본 구조는 구조체로 정의하였다. stack을 초기화하는 stack_init 함수와 명령을 위한 push, pop, size, is_empty, top 함수 생성- strcmp 함수를 이용해 문자열을 비교, 명령을 구분한다. - push의 경우에는 숫자와 함께 입력되므로 띄어쓰기를 토큰으로 인식하여 push 와 n을 구분한 후 n은 atoi(str -> int) 함수를 이용해 정수 변수에 대입한다. 03 코드 #include #include #include #define LEN 10000 typedef struct array_stack{ int arr[LEN]; int top;}array_stack; void stack_init(array_stack *pstack.. 2018. 8. 4.
[알고리즘] Day1 - 한수 01 문제 02 알고리즘 - 십의자리, 일의자리 숫자인 경우, 항상 등차수열의 조건을 만족한다.- 백의자리인 경우, 각 자리수가 등차수열인지 확인한다.- n = 234 -> n/100 = 2- n = n%100 = 34 -> n/10 = 3 - n = n%10 = 4 -> n = 4 03 코드 2018. 8. 4.
[알고리즘] Day1 - 셀프 넘버 01 문제 02 알고리즘 - 각 자리의 수를 파악하기 위해 if 문으로 천의 자리, 백의 자리, 십의 자리, 일의 자리 연산을 순서대로 계산하고 n과 n의 각 자리의 수를 더한다. - 생성자가 있는지를 파악하기 위해 have_constructor[10000]라는 배열을 만들어서 해당 index가 1이면 생성자가 있는 숫자이다. - 더한 결과 값인 result는 생성자가 있는 값이므로, result와 같은 index 의 값을 1로 만들어준다. have_constructor[result] = 1 과 같은 방식 - 최종적으로for문으로 i를 증가시키면서 have_constructor[i] == 0 인 i들을 출력하면 셀프 넘버를 출력할 수 있다. 03 코드 2018. 8. 4.
[알고리즘] Day1 평균은 넘겠지 01 문제 02 알고리즘- 케이스 개수를 입력 받기 위한 변수 C, 각 케이스마다 for문을 반복한다.- 학생의 수를 입력 받기 위한 변수 N에 따라 score배열의 크기를 지정한다.- N의 크기에 따라 for문을 반복하면서 평균을 구한다.- 다시 for문에서 평균과 score를 비교하며 평균을 넘는 학생을 카운트한다. - 카운트한 변수를 기반으로 퍼센트를 출력한다. 03 코드 2018. 8. 4.
[알고리즘] Day1 for 문 사용해보기 - 숫자의 합 01 문제 02 알고리즘- 입력 받을 숫자의 개수를 저장할 변수 N, 1 2018. 8. 4.
728x90