전체 글 8

2025 하계 모각코 최종 회고

느낀 점인공지능을 전공하기 위해선, 프로그래밍 언어와 조금 더 친숙해져야 한다고 생각했다.파이썬을 먼저 배웠기 때문에, 알고리즘을 통해 C를 익히는데에 있어 조금 더 수월했다.이제 어느정도 언어를 배우는 것에 있어서 문턱을 넘어섰다고 생각하기 때문에다음에는 Computer Science, 머신러닝에 대해 조금 더 깊게 파고들어보고 싶다.

카테고리 없음 2025.08.17

모각코 6회차 : 그리디 알고리즘 [Greedy Algorithm]

그리디 알고리즘 [Greedy Algorithm]"직역하면 탐욕, 욕심쟁이 알고리즘으로 미래를 고려하지 않고오직 현재의 시점에서 가장 좋아보이는 선택을 하는 것이다."앞서 말했듯이 현재의 시점에서 가장 빠른, 가장 저렴한,가장 가치있는 선택을 하고 뒤도 돌아보지 않는다. 그렇기 때문에 그리디 알고리즘이무조건 최적의 결과를 도출한다는 보장이 없다. 따라서 100% 최적의 해를 보장해야되지 않는 경우에만 사용하는 경우가 많다.예를 들어 네비게이션은 최적값의 근사치 (10분) 이내에 포함되는경우의 수도 고려를 한다.이처럼 근사치에도 만족할 수 있는 경우에는성능을 개선하기 위해서 사용되곤 한다. 예시 1 : 13305 : 주유소 코드#include int main() { long long int n, mi..

카테고리 없음 2025.07.30

모각코 5회차 : 슬라이딩 윈도우 [Sliding Window]

슬라이딩 윈도우 [Sliding Window]"고정된 사이즈의 윈도우를 이동시켜서 윈도우 내에 있는 데이터를 이용해 문제를 푸는 알고리즘 기법이다."구간 합 구하기, 특정 조건을 만족하는 구간 찾기 등 배열이나 리스트 요소의 일정 범위의 값을 비교할 때 유용하다. 위의 사진에서 고정된 사이즈는 3이다.Sliding Window 알고리즘을 구현하기 위해서는 일단 초기값을 저장해야 하기 때문에사진에서 보이는 A 부터 C 까지를 초기값으로 잡아놓는다.이후, 각 Step마다 맨 앞의 요소를 제거 후, 맨 뒤 + 1의 Index를 추가한다.이 동작을 반복하는 것이 Sliding Window 알고리즘의 핵심이다. 예시 1 : 2559 : 수열 코드#include int main() { int n, k, sum..

카테고리 없음 2025.07.28

모각코 4회차 : 문자열 알고리즘 String Algorithm

문자열 알고리즘 String AlgorithmC는 Python에 비해 동적이지 않고 정적(static)인 프로그래밍 언어이다.그렇기 때문에 문자열 문제들을 해결하기 위해서는 기본적으로 string.h 헤더파일을 사용하는 편이다.문자열은 여러 문제들이 있지만, 그 중 문자열 배열을 정렬하는 문제를 가지고 왔다. 예시 1 : 1427 : 소트인사이드 코드#include #include int main() { char n[10]; char temp; scanf("%s", n); for (int i = 0; i

카테고리 없음 2025.07.23

모각코 3회차 : 동적 계획 Dynamic Programming

동적 계획 Dynamic Programming"최적화 이론의 한 기술이며, 특정 범위까지의 값을 구하기 위해서 그것과 다른 범위까지의 값을 구하는 설계 기법이다."DP는 기본적으로 사전 계산된 값들을 재활용하는 식이다. 앞에서 구했던 답을 뒤에서도 이용하고, 옆에서도 이용하고.이런 방식을 이용하기 때문에 DP는 계산 횟수를 줄여주기에 효율적이다. DP는 기본적으로 분할 정복 알고리즘이랑 비슷하다.문제를 잘게 잘게 쪼개어, 쪼갠 문제들의 답을 구하고 이 답을 이용하여 원래 문제의 답을 찾는 방식이다.여기서 주어진 문제의 답을 한 번만 계산하고 저장한 뒤, 문제를 이용할 때 저장해둔 답을 바로 산출하여 이용하기 때문에DP에서 속도를 향상시킬 수 있는 것이다. 예시 1 : 1003 : 피보나치 함수 코드#in..

카테고리 없음 2025.07.22

모각코 2회차 : 브루트포스 알고리즘 Brute Force Algorithm

브루트포스 알고리즘 Brute Force Algorithm"100억이 든 금고에 4자리 비밀번호를 풀 경우, 그 돈을 가질 수 있다면 어떻게 할 건가?"이 질문에 나는 만약 시간 제한이 없다면 하나하나 다 대입해볼 것 같다.이런 상황에 쓰이는 알고리즘이 브루트포스 알고리즘이다. 직역하면 무식한, 단순한 힘을 가지고 있는 알고리즘이며, 완전탐색 알고리즘이라는 이름으로도 알려져있다.즉, 머리를 쓰지 않고 모든 것을 다 해보겠다는 의미를 가지고 있다. 주로 비밀번호를 해킹할 때 사용되었던 용어인데자주 사용되는 비밀번호, 생년월일, 기념일 등으로 유추를 해서 해킹하는 것이 아니라비밀번호가 될 수 있는 모든 조합을 다 시도해 보는 기법인 Brute Force Attack이라고 불렸다. 예시 1 : 2798 - ..

카테고리 없음 2025.07.16

모각코 1회차 : C의 기본 문법을 이용하여 Tic-Tac-To 프로그램 구축

C의 Basic syntax를 이용하여 Tic-Tac_To 프로그램을 만들어보았다.- 기본적으로 2차원 배열을 사용함.- 여러 형의 함수를 구현해보았음. ● 기본입출력을 위한 헤더파일 (stdio.h), C에서도 bool 자료형을 사용하기 위한 헤더파일 (stdbool.h) 추가.#include #include #define SIZE (3)char board[SIZE][SIZE]; ● 기본적으로 보드를 세팅하는 함수와 보드를 출력하는 함수를 선언해주었다.(void로 선언해줄 시, 반환하는 값이 없다.)void settingBoard() { for (int i = 0; i ● 승리 조건에 만족할 시 Winner를 반환해주는 함수를 선언해주었다.char checkWinner() { for (in..

카테고리 없음 2025.07.15