탐색
가이드
@gabriel227
전체 보기
프로젝트
포스트
팔로잉
스크랩
전체 보기
프로젝트
포스트
팔로잉
스크랩
프로젝트 히스토리
프로젝트 상세 페이지
타임라인
리스트
2022.03.28
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 후기
이전 c언어 문제은행 이후로 모각코에 참여하게 되었습니다. 또 한번 3주간 매일매일 모각코에 참여하면서 코딩실력도 기르고 꾸준한 공부를 할 수 있었네요. 다만 이번 알고리즘은 공부가 더 필요할 것 같다는 느낌을 받았어요. 많이 어렵네요 ㅎㅎ;; 운영자님과 동기분들도 수고하셨고 다들 즐코하시길 바라겠습니다.
2022.03.28
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 15일차
golmu님의 코드를 참고하였습니다. #include <iostream> #include <queue> using namespace std; #define MAX_SIZE 7 int maze[MAX_SIZE][MAX_SIZE] = { {1, 1, 0, 0, 0, 0, 0}, {0, 1, 1, 0, 1, 1, 1}, {0, 1, 1, 1, 1, 1, 1}, {0, 1, 0, 1, 0, 0, 1}, {0, 0, 0, 1, 0, 0, 1}, {1, 0, 0, 1, 1, 1, 1}, {1, 1, 1, 1, 0, 1, 0} }; int isVisited[MAX_SIZE][MAX_SIZE] = {0,}; int dx[4] = {0, 1, 0, -1}; int dy[4] = {-1, 0, 1, 0}; typedef struct { int y; int x; int num; } road; int BFS(int r, int c) { queue<road> q; q.push({0,0,0}); isVisited[0][0] = 1; while (!q.empty()) { road pos = q.front(); int row = pos.y; int col = pos.x; if (row == r && col == c) { return pos.num; } q.pop(); for (int i = 0; i < 4; ++i) { int new_x = col + dx[i]; int new_y = row + dy[i]; if (new_x >= 0 && new_y >= 0 && maze[new_y][new_x] == 1 && !isVisited[new_y][new_x]) { q.push({new_y, new_x, pos.num + 1}); isVisited[new_y][new_x] = 1; } } } return -1; } int main(void) { int answer = BFS(6, 5); cout << answer << endl; return 0; }
2022.03.25
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 14일차
dewchae님의 코드를 참고했습니다. #include <stdio.h> #define MAX_SIZE 5 int graph[MAX_SIZE][MAX_SIZE]; void insert(int start, int dest, int weight, int direction) { graph[start][dest] = weight; if (!direction) { graph[dest][start] = weight; } return; } int main() { insert(0, 1, 1, 1); insert(1, 2, 2, 1); insert(2, 0, 3, 1); for (int i = 0;i < MAX_SIZE;i++) { for (int j = 0;j < MAX_SIZE;j++) { printf("%d ", graph[i][j]); } printf("\n"); } }
2022.03.24
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 13일차
아직 구현하기는 어렵네요. 이전 배운 코드를 활용만 해보았습니다. #include<stdio.h> #include<stdlib.h> #define MAX_HEAP_SIZE 101 typedef struct _Heap { int arr[MAX_HEAP_SIZE]; int heap_count; } Heap; Heap* heap; int compare_with_parent(int index) { if (index <= 1) return 0; int parent_index = index / 2; if (heap->arr[index] < heap->arr[parent_index]) return 1; else return 0; } void swap(int* a, int* b) { int temp = *a; *a = *b; *b = temp; } void insert(int data) { int insert_index, parent, tmp; heap->heap_count++; if (heap->heap_count == 1) { heap->arr[heap->heap_count] = data; return; } heap->arr[heap->heap_count] = data; insert_index = heap->heap_count; while (compare_with_parent(insert_index)) { parent = insert_index / 2; swap(&(heap->arr[insert_index]), &(heap->arr[parent])); insert_index = parent; } } int compare_with_child(int index) { int left, right; left = 2 * index; right = 2 * index + 1; if (left >= heap->heap_count && right >= heap->heap_count) { return 0; } if (right >= heap->heap_count) if (heap->arr[left] < heap->arr[index]) return left; if (heap->arr[left] < heap->arr[right]) return left; else return right; } int pop() { int index = 1, child_index, root, terminal_data; root = heap->arr[1]; terminal_data = heap->arr[heap->heap_count]; heap->arr[heap->heap_count] = NULL; heap->arr[1] = terminal_data; heap->heap_count--; while (1) { child_index = compare_with_child(index); if (!child_index) break; swap(&(heap->arr[child_index]), &(heap->arr[index])); index = child_index; } return root; } int main(void) { heap = malloc(sizeof(Heap)); heap->heap_count = 0; insert(9); insert(6); insert(10); insert(1); insert(5); insert(2); for (int i = 1; i < 6; i++) printf("%d ", heap->arr[i]); pop(); printf("\n"); for (int i = 1; i < 6; i++) printf("%d ", heap->arr[i]); return 0; }
2022.03.23
@gabriel227님이 포스트를 업데이트했습니다.
포스트
코딩테스트 <LEVEL 1> - 12일차
2022.03.23
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 12일차
참고 - https://8iggy.tistory.com/112 def pre_in_to_post(pre_list, in_list): if pre_list: root = pre_list[0] mid = in_list.index(root) pre_in_to_post(pre_list[1:mid + 1], in_list[:mid]) pre_in_to_post(pre_list[mid + 1:], in_list[mid + 1:]) print(root, end=" ") pre_order = [ 7, 3, 1, 5, 4, 12, 10, 8] in_order = [1, 3, 12, 4, 5, 7, 8, 10] pre_in_to_post(pre_order, in_order)
2022.03.22
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 11일차
수정중 #include <stdio.h> #include <stdlib.h> typedef int Elem; typedef struct Node { Elem data; struct Node* left; struct Node* right; } Node; void PreOrder(Node* node) { if(node == NULL) return; printf("%d ", node->data); PreOrder(node->left); PreOrder(node->right); } void InOrder(Node* node) { if(node == NULL) return; InOrder(node->left); printf("%d ", node->data); InOrder(node->right); } void PostOrder(Node* node) { if(node == NULL) return; PostOrder(node->left); PostOrder(node->right); printf("%d ", node->data); } Node* SetTree() { int i; Node* node[8]; for(int i = 0; i < 8; i++) int main() { }
2022.03.21
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 10일차
출처 - https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=holy_joon&logNo=221583745847 #include <stdio.h> #include <stdlib.h> struct NODE //구조체 선언 { struct NODE* llink; int data; struct NODE* rlink; }; struct NODE* head; struct NODE* tail; //노드 생성 함수 struct NODE* makenode(int value){ struct NODE *node = (struct NODE*)malloc(sizeof(struct NODE)); node->llink = NULL; node->data = value; node->rlink = NULL; return node; } //출력 함수 void print(){ struct NODE *p; p = head; while(p->rlink != tail){ printf("%d-->",p->data); p = p->rlink; } printf("%d",p->data); } //초기화 함수 void init(){ head = (struct NODE*)malloc(sizeof(struct NODE)); tail = (struct NODE*)malloc(sizeof(struct NODE)); head->data = 0; tail->data = 0; head->rlink = tail; head->llink = head; tail->rlink = tail; tail->llink = head; } //뒤로부터 노드 추가하는 함수 void push_back(int value){ struct NODE* newnode = makenode(value); struct NODE* p; p = tail; p->llink->rlink = newnode; newnode->llink = p->llink; p->llink = newnode; newnode->rlink = p; } //main함수 int main(){ init(); //head와 tail 초기화 (data = 0) push_back(10); //10 추가 push_back(30); //30 추가 push_back(50); //50 추가 print(); //출력 return 0; }
2022.03.18
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 9일차
dewchae님의 코드를 참고했습니다. #include <stdio.h> #include <stdlib.h> #define MAX_QUEUE_SIZE 10 int queue[MAX_QUEUE_SIZE]; int head = 0, tail = 0; int request[7][2] = { {1,30}, {2,20}, {5,23}, {3,40}, {9,1}, {8,50}, {7,13} }; int is_empty() { if (head == tail) { return 1; } return 0; } int is_full() { if ((tail + 1) % MAX_QUEUE_SIZE == head) { return 1; } return 0; } void enqueue(int item) { if (is_full()) { printf("큐가 꽉찼습니다.\n"); } else { tail = (tail + 1) % MAX_QUEUE_SIZE; queue[tail] = item; } } int dequeue() { if (is_empty()) { printf("큐가 비었습니다.\n"); return -1; } else { head = (head + 1) % MAX_QUEUE_SIZE; return queue[head]; } } void work() { int total = 0, rest = 0, time = 50; while (!is_empty()) { if (time - queue[head + 1] < queue[head + 2]) { rest += 10; } time -= queue[head + 1]; total += dequeue(); printf("%d ", request[head - 1][0]); if (time < 0) { time = 50; } } printf("\n총 소요 시간 : %d\n", rest + total); } int main() { for (int i = 0;i < 7;i++) { enqueue(request[i][1]); } work(); }
2022.03.17
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 8일차
#include <stdio.h> int main() { int arr[10][3], i, a, sum = 0, max = 0, k, m; for (i = 0; i < 10; i++) { scanf("%d %d %d",&a,&arr[i][0],&arr[i][1]); arr[i][2]=arr[i][1]-arr[i][0]; } while(sum<8) { k = arr[sum][2] + arr[sum+1][2] + arr[sum+2][2]; if (max < k) { max = k; m = sum; } sum++; } printf("%d %d %d의 타우린 합은%d, 카페인 합은%d로 가장 효과가 좋습니다.",m, m + 1, m + 2, arr[m][1] + arr[m+1][1] + arr[m+2][1], arr[m][0] + arr[m+1][0] + arr[m+2][0]); }
2022.03.16
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 7일차
#include <stdio.h> #include <math.h> #include <stdbool.h> #define MAX 1000 bool not_prime[MAX]; int sum_prime[MAX/10]; void decimal(int a){ int sq = sqrt(a); for (int i = 2; i <= sq; i++) for (int j = 2*i; j <= a; j += i) not_prime[j] = 1; sum_prime[0] = 0; int size = 1; for (int i = 2, sum = 0; i <= a; i++) if (!not_prime[i]) sum_prime[size++] = (sum += i); int left = 0, right = 1, cnt = 0; while (left <= right && right < size){ int temp = sum_prime[right] - sum_prime[left]; if (temp > a) left++; else { if (temp == a) cnt++; right++; } } printf("%d", cnt); } int main(){ decimal(41); decimal(20); return 0; }
2022.03.15
@yuuulya님이
코딩테스트 <LEVEL 1> - 6일차
포스트를 좋아합니다.
2022.03.15
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 6일차
#include <stdio.h> int main(){ char x[1000]; int l, r; while(1) { l = 0; r = 0; scanf("%s", x); for(int i = 0; i < sizeof(x)/sizeof(int); i++) { if(x[i] == '{') r++; else if(x[i] == '}') l++; } if(l == r) printf("유효한 중괄호 쌍입니다.\n"); else printf("유효하지 않은 중괄호 쌍입니다.\n"); } return 0; }
2022.03.14
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 5일차
#include <stdio.h> int main(){ int arr[5] = {9, 6, 7, 3, 5}; int temp, min = 100, sum; for(int i = 0; i < 5; i++) { min = 100; for(int j = i; j < 5; j++) { if(arr[j] < min) { min = arr[j]; sum = j; } } temp = arr[i]; arr[i] = arr[sum]; arr[sum] = temp; for(int q = 0; q < 5; q++) { printf("%d ", arr[q]); } printf("\n"); } return 0; }
2022.03.11
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트<LEVEL1> - 4일차
임의의 배열을 만들고 재귀를 이용해 이분탐색을 만들어 봤습니다. #include <stdio.h> int search(int arr[], int first, int last, int target) { int mid; if(first > last) return -1; mid = (first + last) / 2; if(arr[mid] == target) return mid; else if(arr[mid] > target) return search(arr, first, mid - 1, target); else return search(arr, mid - 1, last, target); } int main(){ int arr[] = {1, 2, 3, 4, 5, 6, 7, 8}; int index; index = search(arr, 0, sizeof(arr)/sizeof(int) - 1, 5); if(index == -1) printf("탐색 실패\n"); else printf("타겟 저장 위치 : %d\n", index); }
2022.03.09
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트<LEVEL 1> - 3일차
2진 탐색과 최소 최대를 이용하여 풀었습니다. #include <stdio.h> int main(){ int x, max = 0, arr[10000]; for (int i = 0; i < 4; i++) { scanf("%d", &arr[i]); if (max < arr[i]) max = arr[i]; } int left = 1, right = max, mid, sum; while (left <= right) { mid = (left + right) / 2; sum = 0; for(int i = 0; i < 4; i++) { sum += arr[i] / mid; } if(sum >= 10){ left = mid + 1; if(x < mid) { x = mid; } } else{ right = mid - 1; } } printf("%d", x); }
2022.03.08
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트<LEVEL 1> - 2일차
for문(반복문) + for문(반복문) 두개이므로 o(n) + o(n) = o(n) - (상수항 무시) 가 된다. for문(반복문)(for문(반복문)) + for문(반복문) 반복문 안에 반복문 + 반복문 이므로 o(n*n) + o(n) = o(n^2) (낮은 차수 무시) 가 된다.
2022.03.07
@gabriel227님이 새 포스트를 작성했습니다.
코딩테스트 <LEVEL 1> - 1일차
사용할 언어 = c/c++ 개발환경 = repl.it 목표로 삼을 알고리즘 문제 = https://www.acmicpc.net/problem/2098 이전에 c언어 문제은행을 진행하였다. 그러나 마지막 3일은 풀지 못한 문제가 많았다. 그 중 가장 어려운 문제를 풀 수 있을 정도의 실력을 기르고 싶다. 이전에 진행한 풀지 못한 문제 = https://codemate.kr/@gabriel227/C%EC%96%B8%EC%96%B4-%EB%AC%B8%EC%A0%9C%EC%9D%80%ED%96%89-%EC%99%B8%ED%8C%90%EC%9B%90-%EC%88%9C%ED%9A%8C-15%EC%9D%BC%EC%B0%A8