본문 바로가기

전체 글

(80)
[백준] 나이순 정렬 10814 Python 1 2 3 4 5 6 7 8 9 10 n = int(input()) lists = [] for i in range(n): lists.append(list(map(str, input().strip().split()))) lists[i][0] = int(lists[i][0]) lists.sort(key= lambda x:x[0]) # 0 인덱스를 오름차순으로, 만약 내림차순으로 하고 싶다면 -를 붙인다. / 그리고 0 인덱스가 동일하고 1을 내림으로 하고 싶다면 x:(x[0],-x[1]) for i in lists: print(i[0], i[1])
[백준] 방학 숙제 5532 Python (정렬) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 ''' 방학 총일, 국어 총 페이지, 수학 총 페이지, 하루 최대 국어, 하루 최대 수학 ''' cnt1 = 1 cnt2 = 1 lists = [] for i in range(5): lists.append(int(input())) temp1 = lists[3] temp2 = lists[4] while lists[1] > lists[3]: cnt1 += 1 lists[3] += temp1 while lists[2] > lists[4]: cnt2 += 1 lists[4] += temp2 # print("cnt1: ", cnt1, "lists[3]: ", lists[3]) # print(..
[백준] 로또 6603 Python 1 2 3 4 5 6 7 8 9 10 11 12 import itertools while True: a, *b = map(int, input().strip().split()) if a == 0: break if a != 0: c = itertools.combinations(b,6) for i in c: for j in i: print(j, end=" ") print("") print("") 가변적인 길이의 input을 리스트로 받기 위한 *를 이용 (개꿀)
[백준] 괄호 9012 Python 1 2 3 4 5 6 7 8 9 N = int(input()) for i in range(N): temp = input() while "()" in temp: temp = temp.replace("()", "") if len(temp) > 0: print("NO") else: print("YES") Stack으로 풀 수 있지만 replace를 이용하여 제거 해나가는 식으로 가능함.
[백준] 바이러스 2060 Python 해당 문제의 알고리즘 분류는 플로이드 와샬 알고리즘이라고 하는데, 사실 문제를 봤을 때 DFS든 BFS든 뭐든 해도 될 거 같았다. 아직 와샬이 뭔지 잘 모른다. 이후 와샬 알고리즘에 대해서 공부를 한다면 해당 알고리즘을 이용한 소스코드 추가 해야겠다. 바이러스 https://www.acmicpc.net/problem/2606 시간 제한메모리 제한제출정답맞은 사람정답 비율 1 초 128 MB 32034 13634 9498 41.413% 문제 신종 바이러스인 웜 바이러스는 네트워크를 통해 전파된다. 한 컴퓨터가 웜 바이러스에 걸리면 그 컴퓨터와 네트워크 상에서 연결되어 있는 모든 컴퓨터는 웜 바이러스에 걸리게 된다. 예를 들어 7대의 컴퓨터가 과 같이 네트워크 상에서 연결되어 있다고 하자. 1번 컴퓨터가 ..
[백준] DFS와 BFS 1260 Python 본 블로그 DataStructure 카테고리에 있는 소스코드를 활용하면 된다. 하지만 이 문제의 경우 인접리스트를 오름차순으로 정렬된 상태에서 DFS와 BFS를 수행하므로 각 역할 수행 시 인접리스트를 정렬하고 수행한다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 queue = [] lists = [] visited = [] def dfs(x): print(x, end=" ") lists[x].sort() visited.append(x) for i in lists[x]: if i not in visited: dfs(i) def bfs(x): queue.ap..
BFS (Breath First Search) 너비우선탐색 Python 인접리스트 활용 너비우선탐색 BFS (Breadth First Search) 큐를 이용하여 그래프를 순회하는 방법 1. 1번부터 접근을 시작한다 가정했을 때 1번의 인접리스트를 큐에 저장 (모든 노드가 자신의 인접리스트를 큐에 저장 단, 이전에 방문한적이 없으며, Queue에 저장이 안되어 있는 경우 Queue에 저장함) 2. 자신의 모든 노드에 대해 Queue 저장 작업이 완료되면 할 일을 다했다. 이제 Queue의 pop연산을 수행하고 pop한 노드 및 정점의 인접리스트에 대해 1번의 과정을 수행한다. 3. 큐가 비어있지 않는 한 위 과정을 반복적으로 수행 1번부터 BFS시 수행되는 순서는 다음과 같다. 1 2 4 3 11 9 5 6 8 7 10 아래의 소스코드를 통해 각 정점 및 노드별 큐의 상태를 확인할 수 있다..
DFS (Depth First Search) 깊이우선탐색 C++, Python 인접리스트 활용 그래프 순회를 하는 방법 2가지 DFS, BFS 그래프라는 자료구조안에 어떠한 값이 있는지 확인하는 용도 깊이우선탐색 DFS (Depth First Search) stack을 이용하여 그래프를 순회하는 방법 나를 먼저 방문하고, 그 다음 (우선순위 기준으로) 인접한 노드를 차례대로 방문 * 단, 방문했던 노드는 방문하지 않는다. (해당 노드에 대한 visited, checked 가 0이 아닌 경우) DFS = 스택사용 = 선행관계 = 재귀호출 = 발자취 인접한 노드가 없거나 혹은 모든 인접노드를 방문을 한 경우 자신을 기준으로 이전 노드로 이동한다.(방문한 적이 없는 노드를 찾고 방문하고 되돌아오는 과정 반복) 재귀!! v = vertex 정점 visited = 해당 노드에 방문한적이 있는지 없는 체크 ..