본문 바로가기

알고리즘107

[Python] 백준 1913 달팽이 🧑‍💻 [Python] 백준 1913 달팽이 Silver 3 - 구현 무조건 matrix[0][0]은 N * N 이다 시작을 N * N으로 하고, 내려가면서 -1 을 한다 만약에 다음 좌표가 0이 아니거나, 행렬을 나가게 된다면 왼쪽으로 90도를 돌아서 앞으로 가면서 -1을 하면 된다 이것을 좌표의 값이 1이 될때까지 진행을 한다 코드 N = int(input()) M = int(input()) matrix = [[0] * N for _ in range(N)] num, i, j = N * N, 0, 0 ans_row, ans_column = 0, 0 while num > 0: # 아래로 내려가기 while i < N and matrix[i][j] == 0: if num == M: ans_row, ans_.. 2023. 3. 4.
[Python] 백준 13397 구간 나누기 2 🧑‍💻 [Python] 백준 13397 구간 나누기 2 Gold 4 - 이진 탐색 구간의 점수의 최댓값의 최솟값을 기준으로 mid를 구하는 것이다 즉 주어진 배열에서 순회하면서 구간의 최댓값과 최솟값을 구해서 mid보다 작거나 같으면 계속 탐색을 한다 그게 아니면 새로운 구간을 만들어서, 새로운 최댓값과 최솟값을 구해준다 코드 N, M = map(int, input().split()) array = list(map(int, input().split())) def groups(mid): min_num, max_num = array[0], array[0] count = 1 for i in range(N): min_num = min(min_num, array[i]) max_num = max(max_num, a.. 2023. 3. 1.
[Python] 백준 2343 기타 레슨 🧑‍💻 [Python] 백준 2343 Silver 1 - 이진 탐색 블루레이의 개수를 구하고, 개수가 작거나 같으면 right = mid - 1 크면 left = mid + 1을 해준다 이유는, 블루레이는 강의들의 묶음으로 이루어져 있다 블루레이의 개수가 맞춰야 하는 개수보다 적다는 말은, 하나의 블루레이에 너무 많은 강의를 넣었다는 것이다 즉 강의를 더 분포를 시켜야 한다 즉 하나의 블루레이에 들어갈 수 있는 강의의 시간은 더 줄어든다는 것 반대로 블루레이의 개수가 맞춰야 하는 개수보다 크다는 것은, 하나의 블루레이에 너무 적은 강의를 넣었다는 것 코드 N, M = map(int, input().split()) def count_cd(time): count = 0 temp = 0 for lecture .. 2023. 2. 27.
Udemy - Javascript - Graph Udemy - Javascript - Graph Udemy JavaScript 그래프 그래프는 유한하고 변할 수 있는 꼭지점이나 노드나 점들의 집합으로 구성된 데이터 구조다 그래프는 노드나 노드들의 연결을 모은 것이다 이진 트리와 다르게, 노드들끼리 연결만 되어 있으면 된다 그래프의 쓰임새 소셜 네트워크 좌표 / 지도 라우팅 알고리즘 (Routing Algorithms) 시각적 위계 (Visual Hierarchy) 등등 그래프의 유형 vertex : 노드 edge : 노드와 노드의 연결하는 선 Directed / Undirected Graph Undirected Graph : 특정한 경로가 없이, 두 노드 사이에서 왔다갔다 할 수 있다 / 방향이 없음 Directed Graph : edge마다 방향이 .. 2023. 2. 24.
[Python] 백준 2467 용액 🧑‍💻 [Python] 백준 2467 용액 Gold 5 - 이진 탐색 산성 용액과, 알칼리성 용액이 있으면, 어떠한 두 용액을 섞어서 0과 제일 가까운 용액을 만드는 것이다 여기서 산성은 산성끼리, 알칼리성은 알칼리성 용액끼리 섞을 수 있다 이진 탐색을 하기 위해서는 정렬을 꼭 해야 한다 두 용액을 섞어서, 전에 섞은 용액보다 0과 가깝다면, 두 용액과, 용액들을 섞어서 나온 숫자를 저장해야 한다 즉 3개의 변수를 지속적으로 수정해야 하는 것이다 코드 N = int(input()) array = list(map(int, input().split())) array.sort() left = 0 right = N - 1 current_min = abs(array[left] + array[right]) left.. 2023. 2. 18.
[Python] 백준 2512 예산 🧑‍💻 [Python] 백준 2512 예산 Silver 3 - 이진 탐색 예산 요청이 리스트로 주어진다. 그리고 국가가 사용할 수 있는 예산이 주어진다 요청 된 모든 예산들이 국가가 사용할 수 있은 예산 안에 들어가야 한다 그러기 위해서, 상한액을 정해서, 요청 리스트 안에 있는 예산들을 수정한다 코드 N = int(input()) array = list(map(int, input().split())) budget = int(input()) array.sort() left, right = 0, array[-1] if sum(array) 2023. 2. 18.
[Python] 백준 1967 트리의 지름 🧑‍💻 [Python] 백준 1967 트리의 지름 Gold 4 - DFS 두 노드 사이의 가중치들을 더했을 때에 가장 큰 숫자를 출력하는 것 여기서 1의 기준에서 가중치가 제일 큰 노드를 구한다 그 다음, 가중치가 제일 큰 노드를 시작으로 DFS를 하여, 제일 큰 가중치를 구한다 여기서 DFS를 하면 어디서든, 제일 끝에 있는 자식 노드에 가게 된다 문제풀이 첫 DFS를 한 후에,visited 리스트 다시 초기화 시켜야 한다 second_index = visited.index(max(visited))을 통해서 두번째 DFS를 할 때에, 시작 점을 찾는다 코드 import sys sys.setrecursionlimit(10 ** 9) def dfs(start, weight): for node, wei in.. 2023. 2. 16.
[Python] 백준 1520 내리막길 🧑‍💻 [Python] 백준 1520 내리막길 Gold 3 - DFS DFS는 확실히 알았으나, 이걸 어떻게 DP로 풀어야 할지 몰랐다 1) 50 ▶️ 35 ▶️ 30 ▶️ 27 ▶️ 24 ▶️ 22 ▶️ 15 ▶️ 10 2) 50 ▶️ 45 ▶️ 37 ▶️ 32 ▶️ 20 ▶️ 17 ▶️ 15 ▶️ 10 3) 50 ▶️ 45 ▶️ 37 ▶️ 30 ▶️ 25 ▶️ 20 ▶️ 17 ▶️ 15 ▶️ 10 위를 보면, 15 ▶️ 10 은 3 경로 모두 겹친다 그리고, 20 ▶️ 17 ▶️ 15 ▶️ 10은 2번과 3번이 겹친다 겹치는 부분은 한번만 탐색을 하면 된다 즉 이미 방문을 했다면, 10까지의 경로는 겹치는 것이다 즉 겹치는 경로를 굳이 한번 더 탐색할 필요가 없다 코드 import sys sys.se.. 2023. 2. 15.
[Python] 백준 24482 알고리즘 수업 🧑‍💻 [Python] 백준 24482 알고리즘 수업 Silver 2 - DFS DFS 문제이다 깊이 우선 탐색으로, 탐색을 할 때마다 1씩 더해주면 된다 연결이 아예 안 되어 있을 때에는 -1 이다 내림차순 문제풀이 DFS 코드를 짜면 된다 코드 import sys sys.setrecursionlimit(10 ** 6) input = sys.stdin.readline def dfs(start, count): visited[start] = count for cur in graph[start]: if visited[cur] == -1: dfs(cur, count + 1) N, M, start = map(int, input().split()) visited = [-1] * (N + 1) graph = [[].. 2023. 2. 14.