분류 전체보기 196

과제 : WRAP-UP

https://iiblueblue.tistory.com/245 블루트포스⊙ 학습 목표더보기코드스니펫 블루트포스란?블루트포스(Brute Force)는 가능한 모든 경우의 수를 하나도 빠짐없이 전부 시도해보는 것이다. 블루트포스 기법은 보통 자료의 크기가 작거나, 최적iiblueblue.tistory.com https://iiblueblue.tistory.com/256 https://iiblueblue.tistory.com/275 DFS(Depth First Search - 깊이 우선 탐색)⊙ 학습 목표더보기코드스니펫 DFS란?DFS(Depth First Search)는 깊이 우선 탐색이라는 의미로, 트리나 그래프를 최대한 깊이 들어가서 탐색하는 방법이다. 즉, 제일 바닥을 찍는 것을 목표로 하는 방식iib..

카테고리 없음 2025.04.30

다익스트라(Djikstra)

⊙ 학습 목표더보기코드스니펫 다익스트라 알고리즘다익스트라 알고리즘은 길찾기 알고리즘의 기초이다. 조건적인 부분들도 그렇고 이후 개념을 확장해 A* 알고리즘으로 넘어갈 수 있다. 다익스트라 알고리즘은 한 지점에서 다른 지점으로 가는 경로를 찾는게 목적이다.특징다익스트라 알고리즘은 음의 가중치가 없을 때 사용한다.시작 지점 1개의 대해서 판별하는 알고리즘이다. 구현 방법일단 시작 지점이 1이고 도착 지점이 5라고 생각하고 알고리즘을 실행해보자. 1. 일단 시작 지점부터 각 지점까지의 거리를 저장할 배열을 초기화해준다.12345INFINFINFINFINF 2. 시작 지점의 비용을 0으로 계산한다.(시작->시작)123450INFINFINFINF 3. 시작 지점과 연결된 지점을 방문한다.(1->2, 1->3)1..

Coding Test 2025.04.30

BFS(Breadth First Search - 너비 우선 탐색)

⊙ 학습 목표더보기코드스니펫 BFS란?루트, 임의의 노드에서 시작해 인접한 노드를 우선으로 탐색한다.너비 우선 탐색은 그래프, 트리에서 인접한 노드를 우선으로 탐색하는 방법이다. 데이터를 트리 형태로 표현한다고 했을 때 트리의 한 레벨을 다 탐색한 뒤에 다음 레벨을 탐색한다는 뜻이다.사용처최단 경로 탐색에 유리하다.단점큐에 노드를 계속 저장해야 하므로, 메모리 사용량이 많아질 수 있다. 구현 방법BFS는 큐를 사용하게 되면 자연스럽게 넓이 우선 탐색을 할 수 있다.void BFS(){ queue q; q.push(시작 지점); visit[시작 지점] = true; // 방문 체크를 할 bool 배열 while(!q.empty()) { int cur = q.front(); // 이번에 방문..

Coding Test 2025.04.30

DFS(Depth First Search - 깊이 우선 탐색)

⊙ 학습 목표더보기코드스니펫 DFS란?DFS(Depth First Search)는 깊이 우선 탐색이라는 의미로, 트리나 그래프를 최대한 깊이 들어가서 탐색하는 방법이다. 즉, 제일 바닥을 찍는 것을 목표로 하는 방식이다. 그림에서 보이는 것처럼 루트, 시작 노드에서 시작해 가장 멀리 있는 정점을 방문, 더 방문할 정점이 없거나 원하는 노드가 아니라면 다시 돌아가서 탐색한다. 사용처모든 경우의 수(혹은 모든 경로)를 찾는 경우퍼즐을 푸는 문제인 경우미로 문제를 해결하는 경우 구현 방법DFS는 스택, 재귀로 구현한다.void DFS(int node){ // 해당 노드에 대한 방문 처리 visit[node] = true; // 해당 노드에서 원하는 일(출력)을 함 printf("%d ", node..

Coding Test 2025.04.29

2025.03.20

Code KATA오늘치의 알고리즘 코드카타를 풀이하였는데 결국 정답을 맞추지는 못했다. 아래는 문제 링크다.https://school.programmers.co.kr/learn/courses/30/lessons/178870 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 오늘 정답을 맞추지 못한 이유는 시간 초과 때문이었다. 아래의 코드로 문제를 풀이했을 때 간단한 테스트 케이스들은 정답처리가 되었지만 정답이 아니었던 테스트 케이스들은 전부 시간 초과 때문에 실패가 떴다.#include #include using namespace std;vector solution(vector sequence, int ..

TIL 2025.03.20

2025.03.18(화)

Code KATA오늘치의 알고리즘 코드카타를 풀이하고 정리하였다https://iiblueblue.tistory.com/254 [2025.03.18] 큰 수 만들기문제 설명어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24]를 만들 수 있씁니다. 이 중 가장iiblueblue.tistory.com그리디 알고리즘의 카테고리에 있어서 어떻게 푸나 고민을 했다. 그리디 알고리즘에 대해서 모르기 때문이다. 그래서 일단 이해한대로 그리디 알고리즘과 상관없이 문제를 풀기 시작했고 신기하게도 문제가 풀렸다.나중에 궁금해서 내가 풀이한 코드를 챗GPT에게 그대로 넣고 이게 그리디 알고리즘인지 ..

TIL 2025.03.18

[2025.03.18] 큰 수 만들기

문제 설명어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24]를 만들 수 있씁니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수가 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요.  제한사항number는 2자리 이상, 1,000,000자리 이하인 숫자입니다.k는 1 이상 number의 자릿수 미만인 자연수입니다.  입출력 예numberkreturn"1924"2"94""1231234"..

[2025.03.14] 가장 큰 수

문제 설명0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 수는 6210입니다. 0 또는 양의 정수가 담긴 배열 numbers가 매개변수로 주어질 때, 순서를 재배치하여 만들 수 있는 가장 큰 수를 문자열로 바꾸어 return 하도록 solution 함수를 작성해주세요.  제한사항numbers의 길이는 1 이상 100,000 이하입니다.numbers의 원소는 0 이상 1,000 이하입니다.정답이 너무 클 수 있으니 문자열로 바꾸어 return 합니다.  입출력 예numbersreturn[6, 10, 2]"621..

[2025.03.13] 다리를 지나는 트럭

문제 설명트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 수 있으며, 다리는 weight 이하까지의 무게를 견딜 수 있습니다. 단, 다리에 완전히 오르지 않은 트럭의 무게는 무시합니다. 예를 들어, 트럭 2대가 올라갈 수 있고 무게를 10kg까지 견디는 다리가 있습니다. 무게가 [7, 4, 5, 6]kg인 트럭이 순서대로 최단 시간 안에 다리를 건너려면 다음과 같이 건너야 합니다.경과 시간다리를 지난 트럭다리를 건너는 트럭대기 트럭0[][][7, 4, 5, 6]1~2[][7][4, 5, 6]3[7][4][5, 6]4[7][4, 5][6]5[7, 4][5]..