전체 글 139

[이코테] 최단경로 문제 2 [미래도시] 파이썬 풀이

import sys # sys.stdin.readline() from collections import deque sys.setrecursionlimit(1000000) import heapq INF = int(1e9) N,M = map(int,sys.stdin.readline().split()) graph = [[INF] *(N+1) for _ in range(N+1)] for i in range(N+1): for j in range(N+1): if i == j: graph[i][j] = 0 for i in range(M): a,b = map(int,sys.stdin.readline().split()) graph[a][b] = 1 graph[b][a] = 1 X, K = map(int,sys.stdin..

[백준] 최단경로 1753 파이썬 풀이

https://www.acmicpc.net/problem/1753 문제 방향그래프가 주어지면 주어진 시작점에서 다른 모든 정점으로의 최단 경로를 구하는 프로그램을 작성하시오. 단, 모든 간선의 가중치는 10 이하의 자연수이다. 입력 첫째 줄에 정점의 개수 V와 간선의 개수 E가 주어진다. (1 ≤ V ≤ 20,000, 1 ≤ E ≤ 300,000) 모든 정점에는 1부터 V까지 번호가 매겨져 있다고 가정한다. 둘째 줄에는 시작 정점의 번호 K(1 ≤ K ≤ V)가 주어진다. 셋째 줄부터 E개의 줄에 걸쳐 각 간선을 나타내는 세 개의 정수 (u, v, w)가 순서대로 주어진다. 이는 u에서 v로 가는 가중치 w인 간선이 존재한다는 뜻이다. u와 v는 서로 다르며 w는 10 이하의 자연수이다. 서로 다른 두 ..

[백준] 이분탐색 10816 파이썬 풀이

https://www.acmicpc.net/problem/10816 문제 10816번: 숫자 카드 2 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다. 숫자 카드에 적혀있는 수는 -10,000,000보다 크거나 같고, 10,0 www.acmicpc.net 숫자 카드는 정수 하나가 적혀져 있는 카드이다. 상근이는 숫자 카드 N개를 가지고 있다. 정수 M개가 주어졌을 때, 이 수가 적혀있는 숫자 카드를 상근이가 몇 개 가지고 있는지 구하는 프로그램을 작성하시오. 입력 첫째 줄에 상근이가 가지고 있는 숫자 카드의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 둘째 줄에는 숫자 카드에 적혀있는 정수가 주어진다..

[백준] 이분탐색 1920번 파이썬 풀이

얼마만에 백준으로 돌아온건지요 ㅎㅎㅎ 시험기간 때문에 못했던 백준 알고리즘 문제들 이번 방학동안 열심히 업로드해보려고 합니다 ! 파이팅 ! https://www.acmicpc.net/problem/1920 1920번: 수 찾기 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다음 줄에는 N개의 정수 A[1], A[2], …, A[N]이 주어진다. 다음 줄에는 M(1 ≤ M ≤ 100,000)이 주어진다. 다음 줄에는 M개의 수들이 주어지는데, 이 수들 www.acmicpc.net 문제 N개의 정수 A[1], A[2], …, A[N]이 주어져 있을 때, 이 안에 X라는 정수가 존재하는지 알아내는 프로그램을 작성하시오. 입력 첫째 줄에 자연수 N(1 ≤ N ≤ 100,000)이 주어진다. 다..

[이코테] 다이나믹 프로그래밍 실전문제 4번

import sys from sys import stdin from collections import deque sys.setrecursionlimit(10 ** 8) sys.stdin.readline N = int(input()) d = [0] * 1001 d[1] = 1 d[2] = 3 for i in range(3,N+1): d[i] = (d[i-1] + (2*d[i-2])) % 796796 print(d[N]) N의 범위가 1부터 1000까지이므로 d배열을 1001개만큼 설정해주고, d[1] = 1, d[2] = 3은 직접 그림을 그려보면서 케이스 분류를 통해 알 수 있었다. 만약 1x2 도형을 사용한다면 , 남는 도형은 가로 N-1, 세로 2 만약 2x1, 2x2 도형을 사용한다면 남는 도형은 ..

[이코테] 다이나믹 프로그래밍 실전문제 3번

import sys from sys import stdin from collections import deque sys.setrecursionlimit(10 ** 8) sys.stdin.readline N = int(input()) array = list(map(int,sys.stdin.readline().split())) d = [0] * 101 d[0] = array[0] d[1] = max(array[0],array[1]) for i in range(2,N): d[i] = max(d[i-1],d[i-2] + array[i]) print(d[N-1]) 재귀함수의 스택 크기가 한정되어있을 수 있으므로, bottom - up 방식을 이용하여 구현하는 것이 활용적이다. 그래서 피보나치 수열에서도 초항과 두..

[이코테] 이진 탐색 실습문제 3번

떡볶이 떡 만들기 문제 풀이 N,M = list(map(int,sys.stdin.readline().split())) array = list(map(int,sys.stdin.readline().split())) start = 0 end = max(array) mid = (start+end) // 2 while start mid: sum = sum + (x - mid) if sum < M: end = mid - 1 else: result = mid start = mid + 1 print(result) 이진 탐색을 함으로써 데이터의 개수가 과하게 많은 경우 O(NlogN)으로 수행 시간을 빠르게 단축시켜줄 수 있다. 문제 예제에서 원하는 최솟값의 합이 6이었으므로, sum이 M보다 크다는 말은 mid가 아직..