CS/백준 풀이

·CS/백준 풀이
플로이드 와샬 알고리즘을 통해 해결했다. 별거 없다. n=int(input()) m=int(input()) road=[[99999999 for _ in range(n+1)] for _ in range(n+1)] for _ in range(m): a,b,c=map(int,input().split()) if road[a][b]>c: road[a][b]=c for t in range(n+1): for x in range(n+1): for y in range(n+1): if road[x][y]>road[x][t]+road[t][y]: road[x][y]=road[x][t]+road[t][y] if x==y: road[x][y]=0 for x in range(1,n+1): for t in road[x][1:]: ..
·CS/백준 풀이
동전으로 돈만들기. 1,2로 7을 만드는 경우를 살펴보면, 1+6을 만드는 경우의 수 2+5를 만드는 경우의 수가 있다. 그런데 이걸 1과 2를 동시에 진행시키면 중복되는 경우가 세지게 된다. 그래서 결론적으로는 피보나치수열처럼 된다. 아래는 잘못 작성한 코드이다. t = int(input()) for i in range(t): n = int(input()) l = list(map(int, input().split())) m = int(input()) dp = [0 for i in range(m + 1)] dp[0] = 1 for x in range(1, m + 1): for t in l: if x - t >= 0: dp[x] += dp[x - t] print(dp) 이것을 1과 2의 경우를 분리해서 진..
·CS/백준 풀이
말만 번지르르하지 별거 없다. 파란 영역 중에 제일 큰 계단을 찾으라는 문제. 아직 스위핑을 안배워서 기본 점수만 받아 보았다. 경우에 따라 잘 나눠서 코딩해주면 된다. 1. 이전값 보다 큰 경우 이전 dp값 +1 2. 이전값과 같은 경우 이전 dp + 0 3. 이전값보다 작을 경우 이전 dp값이 현재 높이보다 작은 경우 : 이전 dp+1 이전 dp값이 현재 높이와 같은 경우 : 이전 dp +0 이전 dp값이 현재 높이보다 클 경우 : 현재 높이값 n=int(input()) h=[0] h.extend(map(int,input().split())) dp=[0 for _ in range(n+1)] dp[1]=h[1] for x in range(1,n+1): if h[x]>h[x-1]: dp[x]=dp[x-1..
·CS/백준 풀이
처음에 수색범위 만큼만 이동할 수 있는 줄 알고 삽질했던 문제;; 알고보니 수색범위안에 있는 곳은 모두 갈 수 있던 거였다. 플로이드-와샬을 통해 해결했다. n에서 시작하여 모든 노드까지의 영역이 기록시켜서 1부터 n까지 수색범위를 넘지 않는 것들의 아이템 수를 더해주면 된다. from collections import deque n, d, r = map(int, input().split()) region = [0] region.extend(list(map(int, input().split()))) m = [[999999 for _ in range(n + 1)] for _ in range(n + 1)] for _ in range(r): a, b, c = map(int, input().split()) m[..
·CS/백준 풀이
오랜만의 bfs, dfs 항상 그렇듯, dfs는 시간초과다. 처음 짠 코드 from collections import deque import sys input=sys.stdin.readline n,m=map(int,input().split()) M=[] for _ in range(n): M.append(list(str(input()))) def bfs(x,y,Mcopy): vismap=[[0 for x in range(m)] for y in range(n)] q=deque() cnt=1 q.append([x,y,cnt]) while q: x,y,cnt=q.popleft() a=[-1,1,0,0] b=[0,0,-1,1] for t in range(4): X=x+a[t] Y=y+b[t] if 0
·CS/백준 풀이
작은 점프, 큰 점프 그리고 단 한번의 매우 큰 점프를 통해 마지막 돌로 가는 최소 에너지를 구하는 문제. 우선 단 한번의 매우 큰 점프를 제외하고 생각했다. 단 한번은 예외처리를 해주면 되니까 라는 생각에서 그랬다. n까지 가는데 드는 최소 에너지 dp(n)은 dp(n-1)+작은점프, dp(n-2)+큰점프 중 큰 값이다. 코드로 구현하면 n=int(input()) d=[[0,0]] for _ in range(n-1): d.append(list(map(int,input().split()))) dp=[0 for x in range(n+1)] if n==1: print(0) exit() elif n==2: print(d[1][0]) exit() dp[2]=d[1][0] dp[3]=min(d[1][0]+d[2..
·CS/백준 풀이
다시한번 타일채우기. 이건 좀 특이한 타일채우기이다. 그래도 여타 타일채우기가 그렇듯, 역시 어렵다. 특이한 점은 이건 홀수일때 0이라는 점이다. n=2일때를 보자. n=3일때는 칸을 다 채울수 없으므로 n=4를 보면, 이렇게 쪼개서 생각 할 수 있다. 그리고 여기에 새로운 모양이 생기는데 바로, 이 두가지이다. 그래서 n(4)=3*n(2)+2=11임을 알 수 있다. 다음은 6이다. 마찬가지로 이렇게 볼 수 있다. 그리고 뒤집으면 이렇게 되는데, 여기서 세주면 전부 겹치고, 아까 n(4)에서 새롭게 만들어진 두개만 카운트 된다는 것을 알 수 있다. 그리고 n(6)의 새로운 모양도 생긴다. 그리고 n=8일때, 경우를 나눠보면 이 세가지인데 이를 통해서 n(8)=n(2)*n(6)+2(새로생긴 모양)*(n(4..
·CS/백준 풀이
타일 싫어... 진짜 엄청 고민했던 문제. 겹치는 경우가 많아서 겹치지 않는 경우로 세야한다. n=3인 경우, 여기서 잘보면 두가지로 분류 할 수 있는데, 처음에 2*1이 온 경우와, 처음에 2*2또는 1*2가 온 경우이다. 처음에 2*1이 온 경우, n=3이므로 1을 뺀, n(2)와 같은 값을 가진다. 처음에 2*2나 1*2가 온 경우, n=3이므로, 2만큼 뺀, n(1)만큼의 값을 가진다. 따라서 일반항은 n(k)=n(k-1)+2*n(k-1)이다. 다시한번 살펴보면, 빨간 박스(2*2)는 처음 세는 값이므로 여기에는 이전 값의 모든 값이 와도 된다. 하지만 두번째, 파란박스에는 ㅣㅣ(2*1 2개)가 오면 빨간 박스와 겹치는 경우가 생긴다. 그래서 파란 박스에 올 수 있는 경우 중 2*2와 1*2 두개..
·CS/백준 풀이
개인적으로 굉장히 어려웠던 문제... 첫째로, 최대 수도관 용량으로 dp를 할지, 길이로 dp로 할지 정한다고 해맸다. 두번째로, 입력받아서 배열에서 꺼내쓰려다가 시간초과로 쳐맞았다. 세번째로, 중복사용때문에 고생했다. 아무튼 코드는 아래와 같다. 초기화 방법은 입력값이 1이라고 하면 dp[1]이 들어가는 모든 값의 합을 바꾼다. x가 7이라고 한다면, dp[7]=min(1,dp[7-1])이다. 그리고 만약 dp[7]이 입력이 들어오면 변경 해주는 방식이다. d, p = map(int, input().split()) dp = [0 for _ in range(d+ 1)] for _ in range(p): l, c = map(int, input().split()) for x in reversed(range(..
·CS/백준 풀이
0부터 n까지의 정수 k개를 더해서 n이 되는 경우의 수를 구하는 프로그램 뭔가 고등학교 시절의 자연수 분할이 떠오른다. 차이점은 0도 포함한다는 점 예를들어 0부터 9까지 2개로 나타내면 0+0 1+0, 0+1 2+0, 1+1, 0+2 3+0, 1+2, 2+1, 0+3 4+0, 1+3, 2+2, 3+1, 4+0 5+0, 1+4, 2+3, 3+2, 4+1, 5+0 ... 와 같이 (n,2)=n+1임을 알 수있다. 그리고 잘 보면, 1+ n-1, 2+n-2꼴로 나타 낼 수 있는데, 이를 잘 보면 (n,k)=(n-1,k-1)+(n-1,k-2)...(n-1,0)으로 나타낼 수 있음을 알 수 있다. 가로는 숫자, 세로는 k개로 나타 낸 것이다 0 1 2 3 4 1 1 1 1 1 1 2 1 2 3 4 5 3 1 ..
_0422
'CS/백준 풀이' 카테고리의 글 목록 (7 Page)