공부/코딩테스트 51

[프로그래머스] 입양 시각 구하기(2)(SQL)

https://programmers.co.kr/learn/courses/30/lessons/59413 코딩테스트 연습 - 입양 시각 구하기(2) ANIMAL_OUTS 테이블은 동물 보호소에서 입양 보낸 동물의 정보를 담은 테이블입니다. ANIMAL_OUTS 테이블 구조는 다음과 같으며, ANIMAL_ID, ANIMAL_TYPE, DATETIME, NAME, SEX_UPON_OUTCOME는 각각 동물의 아이디, 생물 programmers.co.kr 나의 답 : select a.hour, nvl(b.count, 0) --값이 없을 수 있어서 nvl사용 from ( select rnum hour from ( select (rownum-1) rnum from animal_outs --기존 테이블을 활용해서 0~..

[알고리즘] dp

다이나믹 프로그래밍의 조건 1. 최적 부분 구조(Optimal Substructure): 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 2. 중복되는 부분 문제(Overlapping Subproblem): 동일한 작은 문제를 반복적으로 해결해야 한다. 점화식: 인접한 항들 사이의 관계식 만들기 피보나치 수열 탑다운 프로그래밍 d = [0]*100 #메모이제이션 하기 위한 리스트 초기화 def fibo(x): if x==1 or x==2: #종료조건 return 1 if d[x]!=0: #이미 계산한 적이 있다면 그대로 반환 return d[x] d[x]=fibo(x-1)+fibo(x-2) #아직 계산하지 않았다면 점화식에 따라서 결과 반환 return d[x..

[알고리즘] 이진탐색

순차탐색 : 리스트 안에 있는 특정한 데이터를 찾기 위해 앞에서부터 데이터를 하나씩 확인 이진탐색 : 정렬되어 있는 리스트에서 탐색 범위를 절반씩 좁혀가며 데이터를 탐색. 이진탐색은 시작점, 끝점, 중간점을 이용하여 탐색 범위를 설정한다. 재귀: def binary_search(array,target,start,end): if start>end: return None mid = (start+end)//2 if array[mid]==target: return mid elif array[mid]>target: return binary_search(array,target,start,mid-1) else: return binary_search(array,target,mid+1,end) n, target = li..

[알고리즘] 플로이드 워셜

각 단계마다 특정한 노드 k를 거쳐가는 경우를 확인한다. a에서 b로 가는 경로보다 a에서 k를 거쳐 b로 가는 경로가 더 빠른지를 검사한다. INF=int(1e9) #무한을 의미 n=int(input()) #노드의 개수 m=int(input()) #간선의 개수 graph=[[INF]*(n+1) for _ in range(n+1)] #2차원 리스트를 만들고 무한으로 초기화 for a in range(1,n+1): for b in range(1, n+1): if a==b: graph[a][b]=0 #자기자신으로 가는 비용 for _ in range(m): #간선 정보 입력받기 a,b,c = map(int,input().split()) graph[a][b]=c for k in range(1, n+1): fo..

[알고리즘] 다익스트라 최단거리 알고리즘

O(V^2). V=노드의 개수. V가 5000이하면 사용할만하다. 그 이상 되면 우선순위 큐 사용. import sys input = sys.stdin.readline INF = int(1e9) # INF = 1000000000 n, m = map(int, input().split) start = int(input()) graph = [ [] for i in range(n+1)] visited = [False]*(n+1) distance = [INF]*(n+1) for _ in range(m): a, b, c = map(int, input().split()) graph[a].append((b,c)) def get_smallest_node(): min_value = INF index = 0 for i in..

[알고리즘] DFS, BFS

DFS : 깊이 우선 탐색, stack자료구조 사용 BFS : 너비 우선 탐색, queue자료구조 사용 from collections import deque def dfs(graph, v, visited): visited[v] = True print(v, end=' ') for i in graph[v]: if not visited[i]: dfs(graph, i, visited) def bfs(graph, start, visited): queue = deque([start]) visited[start]=True while queue: v=queue.popleft() print(v, end=' ') for i in graph[v]: if not visited[i]: queue.append(i) visited..

[프로그래머스] 숫자의 표현(파이썬)

https://programmers.co.kr/learn/courses/30/lessons/12924?language=python3 코딩테스트 연습 - 숫자의 표현 Finn은 요즘 수학공부에 빠져 있습니다. 수학 공부를 하던 Finn은 자연수 n을 연속한 자연수들로 표현 하는 방법이 여러개라는 사실을 알게 되었습니다. 예를들어 15는 다음과 같이 4가지로 표현 할 programmers.co.kr def solution(a): n=0 answer = 0 if a%2==0: n=a//2 else: n=(a//2)+1 for i in range(1,n): s=0 for j in range(i,n+1): s+=j if s==a: answer+=1 elif s>a: break return answer+1

[프로그래머스] 다리를 지나는 트럭(파이썬)

https://programmers.co.kr/learn/courses/30/lessons/42583 코딩테스트 연습 - 다리를 지나는 트럭 트럭 여러 대가 강을 가로지르는 일차선 다리를 정해진 순으로 건너려 합니다. 모든 트럭이 다리를 건너려면 최소 몇 초가 걸리는지 알아내야 합니다. 다리에는 트럭이 최대 bridge_length대 올라갈 programmers.co.kr sum을썼었는데따로가볍게계산하게끔했음 def solution(bridge_length, weight, truck_weights): bridge=[] for i in range(bridge_length): bridge.append(0) w=0 answer = 0 bridge_weight=0 while(truck_weights): answ..

[프로그래머스] 프린터(파이썬)

https://programmers.co.kr/learn/courses/30/lessons/42587?language=python3 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린 programmers.co.kr def solution(p,l): answer=0 while(p): if p[0] 0: l-=1 else: l=len(p)-1 print(answer)

[프로그래머스] 기능개발(파이썬)

https://programmers.co.kr/learn/courses/30/lessons/42586?language=python3 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 나의 답 : # import collections, math # def solution(p, s): # p=collections.deque(p) # s=collections.deque(s) # a=0 # print(s,p) # answer = [] # for i in range(len(p)): # p[i]=math.ceil(..