프로그래밍(주력)/백준 문제풀이(53)
-
2019.03.12) 백준 최단경로 특집 1편 - 1753(PyPy3)
우선순위 큐 사용했다.파이썬한테 불리한 문제라 혼났다.12345678910111213141516171819202122232425262728293031323334353637from heapq import heappush, heappop V, E = map(int, input().split(' ')) K = int(input()) graph = {i: list() for i in range(1, V + 1)} for i in range(E): u, v, w = map(int, input().split(' ')) graph[u].append((v, w)) # 무한대를 이렇게 구현해보았다.check = {i: 'INF' for i in range(1, V + 1)}check[K] = 0pq = list()hea..
2019.03.12 -
2019.03.11) 백준 dfs 특집 3편 - 11724, 2468(PyPy3)
dfs. 재밌다 해결하는 방법을 생각하고 짜면 바로 성공해서 맛이 난다. 11724번 1234567891011121314151617181920212223242526272829c, n = map(int, input().split(' '))# 그래프 제작graph = {i: list() for i in range(1, c + 1)} for i in range(n): a, b = map(int, input().split(' ')) graph[a].append(b) graph[b].append(a) visited = [False for i in range(c + 1)]count = 0 # 모든 정점을 순환for j in range(1, c + 1): # 물론 방문하지 않은 경우만 if not visited[j]..
2019.03.11 -
2019.03.10) 백준 이진탐색 마지막 - 1920 (PyPy3)
소마 면접도 있고 하고싶은 일도 있어서 날먹했습니다.. 123456789101112131415161718192021222324252627282930313233343536373839404142l_len = int(input())l = list(map(int, input().split(' ')))l.sort() # 이분 탐색def search(h): # 맨 왼쪽은 0 left = 0 # 맨 오른쪽은 끝값 right = l_len - 1 # 중간 mid = (left + right) // 2 result = 0 while True: # 만약 중간값이 구할 값이면 if l[mid] == h: # 1 리턴 result = 1 break # 만약 중간값이 구해야하는 값보다 작으면 elif l[mid] h: # 중간..
2019.03.10 -
2019.03.09) 백준 주제가 섞여버렸.. - 1300, 2805 (PyPy3)
이번엔 문제가 좀 재밌었다. 풀이대로 푸니까 풀려서 좀 성취감이 든다고 해야하나.그리고 이진탐색은 초기값을 잘설정해줘야 한다. 제로디비전이 많이 뜨는 주제중 하나. 1654번1234567891011121314151617181920212223242526c, n = map(int, input().split(' '))l = [int(input()) for i in range(c)]l.sort() # 1 이하로 자르면 큰일남 100% 런타임에러가 이 이유left = 1right = l[-1]re = 0# 이분탐색 시작while left 0 and not visited[j][i - 1] and l[j][i - 1] == 0: stack.append((j, i - 1)) if j
2019.03.09 -
2019.03.08) 백준 이분탐색 특집 2편 -1300, 2805 (PyPy3)
이분탐색은 이상한데도. 쓰일수가 있구나를 알았다 1300번 1234567891011121314151617181920c = int(input())h = int(input()) left = 1right = h while right >= left: count = 0 mid = (left + right) // 2 # 최소 높이만큼 더하기 for i in range(1, c + 1): count += min(mid // i, c) if count
2019.03.08 -
2019.03.07) 백준 이분탐색 특집 1편 -10815 (PyPy3)
이분탐색은 정렬을 하고 탐색한다는 것에서 좀 인간답다. 1234567891011121314151617181920212223242526272829303132333435363738394041l_len = int(input())l = list(map(int, input().split(' ')))l.sort() # 이분 탐색def search(h): # 맨 왼쪽은 0 left = 0 # 맨 오른쪽은 끝값 right = l_len - 1 # 중간 mid = (left + right) // 2 result = 0 while True: # 만약 중간값이 구할 값이면 if l[mid] == h: # 1 리턴 result = 1 break # 만약 중간값이 구해야하는 값보다 작으면 elif l[mid] h: # 중간 -..
2019.03.07 -
2019.03.06) 백준 완전탐색 특집 3편 - 2667, 1012 (PyPy3)
dfs사용하니 고민 조금만 하고 해결하였다. 2667번 1234567891011121314151617181920212223242526272829303132333435363738394041c = int(input())l = [list(map(int, input())) for i in range(c)] # dfs용 방문확인배열visited = [[False for j in range(c)] for i in range(c)] # 결과값 저장용result = list()for i in range(c): for j in range(c): # 2중 반복문으로 방문하지 않은 모든 점을 방문함 # 만약 방문하지 않고, 집이 있다면 if not visited[j][i] and l[j][i] == 1: # 현재 카운트 c..
2019.03.06 -
2019.03.05) 백준 스택 심화 1편 - 6549 (PyPy3)
너무 어려웠다. 아직도 로직이 이해가 안간다. 12345678910111213141516171819202122232425262728293031323334while True: l = list(map(int, input().split(' '))) n = l[0] # 0이면 탈출 if n == 0: break l = l[1:] mx = 0 stack = [0] # 전체 탐색 for i in range(1, n): # 스텍이 비어있지 않고, 탐색할 곳이 지금보다 클때 while len(stack) != 0 and l[stack[-1]] > l[i]: # 맨 위의 값 출력 tmp = stack.pop() # 만약 출력하고 스택이 비면 if len(stack) != 0: w = i - stack[-1] - 1 el..
2019.03.05 -
2019.03.04) 백준 완전탐색 특집 2편 - 1697 (PyPy3)
bfs를 사용하면 된다는 것은 바로 감이왔다. 방법을 2가지를 만들었다. 첫째는 이미 간 곳을 count로 저장하여 돌아가는 로직 둘째는 이중 반복으로 q를 끝까지 다 돌아야지 count를 1씩 올리는 로직 1번 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849a, b = map(int, input().split(' ')) # 카운터 저장용visited = [-1 for i in range(100002)]# 첫번째 카운터는 0visited[a] = 0# 큐에 넣기q = [a] while q: # 앞쪽 값을 뺴옴 now = q.pop(0) # 결과값이랑 같으면 출력 if now == b: prin..
2019.03.04 -
2019.03.03) 백준 완전탐색 특집 1편 - 1260 (PyPy3)
dfs는 스택, bfs는 큐를 활용한다는걸 스택이랑 큐를 배우고 나서 알았다. 재귀로 구현할땐 아니긴 하지만 for문으로 최적화할땐 꼭 필요해보인다. 1260번 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152d, c, r = map(int, input().split(' ')) # 그래프 만들기graph = dict()for i in range(1, d+1): graph[i] = list() for i in range(c): a, b = map(int, input().split(' ')) graph[a].append(b) graph[b].append(a) for i in range(d..
2019.03.03