일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- dfs
- 머신러닝
- SIFT
- Reinforcement Learning
- 그래프 이론
- IN
- Python
- edge detection
- 백준
- dynamic programming
- sklearn
- 강화학습
- image processing
- opencv
- exists
- machine learning
- Mask Processing
- 자료구조
- classification
- MinHeap
- C++
- AlexNet
- TD
- MySQL
- DP
- BFS
- clustering
- canny edge detection
- 딥러닝
- 인공지능
- Today
- Total
목록백준 (31)
JINWOOJUNG
접근법 Dynamic Programming의 가장 쉬운 문제이다. 직관적인 접근이 가능한데, 우리가 원하는 것은 3a+5b = Inupt을 만족하는 a,b에 대하여 a+b가 최소가 되는 경우를 찾고싶은 것이다. 또한, 만들 수 없는 조합일 때는 결과가 -1이야 하는것을 명심하면 된다. 단순히 a 혹은 b 만으로 Input을 나타낼 수 있는 경우도 고려해야 하기 때문에 2중 for 문에서 해당 조건만 고려하면 쉽게 접근 가능하다. 또한, 3a+5b = Input을 만족하는 a,b에 대해서 Result를 처음에 -1로 설정하고 -1인 경우는 그냥 a+b를 Result로, -1이 아닌 경우 기존 Result와 a+b 중 작은 값을 Result로 설정하면 된다. 정답 #include #include using ..
접근법 이차원 배열(벡터)에서 index를 다루고 놀아야 하는 중요한 문제이다. 문제를 보면 삼각형 A와 B중 하나만 회전, 반전 시키면서 B와 비교하면 찾을 수 있다고 생각이 들 것이다. 따라서 가능한 경우의 수를 해당 Index의 변화를 고려하여 접근한다면 조금 수월하게 접근할 수 있다. 먼저 각 삼각형의 원소들을 받아오기 위해서 부터 이중 for문이 요구된다. 첫번째 줄엔 1개, 2번째 줄엔 2개 등 각 줄에 맞춰서 받아와야 하는 원소가 증가한다. 따라서 첫번째 for문의 index를 s32_I라 하며고 두번째 index를 s32_J라 하면 한 삼각형의 줄의 개수를 s32_Cnt로 받아온 후 s32_I는 0부터 s32_Cnt보다 작을때 까지, s32_J는 s32_I보다 같거나 작을 때 까지 반복해서..
접근법 Sudo Code 기반으로 작성하면 쉽게 해결 가능하다. sort()를 이용해서 정렬을 통해 정점 번호를 오름차순으로 방문 하였지만, 추후 다른 정렬 기법 기반으로 정렬을 구현할 필요는 보인다. 정답 #include #include #include #include using namespace std; vector ars32_Graph[100001]; bool arb_Visited[100001] = { false }; int32_t ars32_Result[100001]; void bfs(int32_t s32_R); int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int32_t s32_N, s32_M, s32_..
접근법 각 사람이 돈을 인출하는데 필요한 시간을 최소화 하기 위해서는 각 사람이 소요되는 시간을 기준으로 오름차순으로 정렬한 후 각 사람이 필요한 시간의 합을 더하면 된다. 이를 위해선 vector나 sort 함수를 쓰는게 좋으나, 직접 Buble Sort를 구현하고 전체 소요 시간을 계산한다. 정답 #include using namespace std; int32_t ars32_Time[1001]; void BubbleSort(int32_t s32_Num) { int32_t s32_I, s32_J; for (s32_I = 0; s32_I < s32_Num - 1; s32_I++) { for (s32_J = 0; s32_J < s32_Num - 1; s32_J++) { if (ars32_Time[s32_J..
Intro 앞으로 모든 백준 문제는 C++로 해결하고자 한다. 코테를 위해서는 Python이 더 편하지만, 실제 실력을 더 향상시킬 수 있는 것은 C++이기 때문에 코테 준비는 나중에 하기로 했다. 또한, 이번에 자율주행 경진대회를 준비하면서 코드 통합을 진행 하였는데 변수명을 선언하는 것이 전부 다 달라서 애먹었다. 앞으로는 박사님이 정해주신 틀 안에서 타인이 봐도 알아볼 수 있도록 변수명을 통합할 것이다. 접근법 비행기 종류는 vector로 저장하면 된다. a,b쌍은 a,b를 왕복하는 비행기가 있음을 의미하기에 vector 배열의 a와 b index에 모두 저장해야 한다. 모든 국가를 여행하기 위해서 각 국가를 방문했음을 확인하기 위한 bool 형 array가 요구된다. 또한 저장한 비행기 종류를 기..
접근법 처음에는 배열 index가 다르기에 index를 맞추고자 입력받을 때 1인 경우만 graph 배열에 저장하여 dfs()를 돌 때, 1부터 N까지 각 노드에서 시작하여 끝까지 내려가는 경로 중 지나가는 노드를 따로 저장하여 다시 인접행렬로 출력하도록 구현하였다. import sys import heapq sys.setrecursionlimit(10**6) N = int(input()) graph = [[] for _ in range(N+1)] resultGraph = [[0]* N for _ in range(N)] def dfs(x,y,flag): if x == y and flag == False: flag = True elif x == y and flag == True: heapq.heappush..
접근법 단순히 현재 노드의 부모를 찾는거기 때문에, dfs(),bfs()없이 단순하게 해결할 수 있을 것 같아서 아래와 같이 접근했다. import sys N = int(input()) visited = [0] * (N+1) visited[1] = 1 for _ in range(N-1): x, y = map(int,sys.stdin.readline().split(" ")) if visited[x] != 0: visited[y] = x else: visited[x] = y for i in range(2,N+1): print(visited[i]) 입력받는 두 수 중 하나는 무조건 이전에 언급된 노드여야 루트가 1인 트리를 형성할 수 있다. 따라서 입력받음과 동시에 두 수 중 방문되었던 노드가 있다면 다른 노..
접근법 기존의 dfs에서 대각선을 탐색하는 경우의 수를 추가해 줘야 하며, "0 0"을 입력받기 전까지 반복해야 함으로 반복할 때 마다 전체 그래프와 cnt를 초기화 해 줘야 한다. 따라서 dfs()의 parameter에 전체 그래프도 추가되어야 한다. 정답 import sys sys.setrecursionlimit(10**6) di = [0,0,-1,1,1,1,-1,-1] dj = [1,-1,0,0,1,-1,1,-1] def dfs(i, j, Map): Map[i][j] = 0 for k in range(8): I = i+di[k] J = j+dj[k] if 0