본문 바로가기
반응형

내가 공부하려고 올리는/알고리즘9

백준 구현 알고리즘 - 1966번(파이썬) 문제 풀이 더보기 import sys test_cases = int(sys.stdin.readline()) for i in range(test_cases) : n, m = map(int, sys.stdin.readline().split()) important = list(map(int, sys.stdin.readline().split())) array = [0]*n array[m] = 'target' order = 0 while True : if important[0] == max(important) : order += 1 if array[0] == 'target' : print(order) break; else : array.pop(0) important.pop(0) else : important.ap.. 2022. 5. 11.
백준 구현 알고리즘 - 11866번(파이썬) 문제 풀이 더보기 from collections import deque import sys queue = deque() array = [] n, k = map(int, sys.stdin.readline().split()) for i in range(1, n+1) : queue.append(i) while queue : for i in range(k-1) : queue.append(queue.popleft()) array.append(queue.popleft()) print("") 후기 구현 문제는 풀다보니 라이브러리를 얼마나 능숙하게 사용하는지가 중요한 것 같다. 파이썬 자체도 잘 모르고 부끄럽지만 자료구조에도 능숙하지 않다보니 처음에는 'deque'와 같은 자료 구조없이 처음부터 풀어보려고 했는데 정답.. 2022. 5. 11.
백준 구현 알고리즘 - 11723번(파이썬) 문제 풀이 더보기 import sys n = int(sys.stdin.readline()) s = set() for _ in range(n) : array = sys.stdin.readline().strip().split() if len(array) == 1: if array[0] == "all": s = set([i for i in range(1, 21)]) else: s = set() else: func, x = array[0], array[1] x = int(x) if func == "add": s.add(x) elif func == "remove": s.discard(x) elif func == "check": print(1 if x in s else 0) elif func == "toggle":.. 2022. 5. 11.
백준 알고리즘 - 그리디 알고리즘(1931번/1026번/1541번/2217번/13305번/10610번) 그리디 알고리즘이란? - '현재 상황에서 지금 당장 좋은 것만 고르는 방법' - 탐욕 알고리즘이라고도 불린다. 1931번 : 회의실 배정 문제 한 개의 회의실이 있는데 이를 사용하고자 하는 N개의 회의에 대하여 회의실 사용표를 만들려고 한다. 각 회의 I에 대해 시작시간과 끝나는 시간이 주어져 있고, 각 회의가 겹치지 않게 하면서 회의실을 사용할 수 있는 회의의 최대 개수를 찾아보자. 단, 회의는 한번 시작하면 중간에 중단될 수 없으며 한 회의가 끝나는 것과 동시에 다음 회의가 시작될 수 있다. 회의의 시작시간과 끝나는 시간이 같을 수도 있다. 이 경우에는 시작하자마자 끝나는 것으로 생각하면 된다. 입력 첫째 줄에 회의의 수 N(1 ≤ N ≤ 100,000)이 주어진다. 둘째 줄부터 N+1 줄까지 각 회.. 2022. 4. 25.
모두를 위한 컴퓨터 과학(CS50) - 정렬 알고리즘 지난 글에서 검색 알고리즘을 알아봤습니다. 서랍을 예시로 들면서 서랍 안에 내용물이 정리되어 있다면? 정리되어 있지 않다면?으로 나눠서 문제를 해결해봤습니다. 그렇다면 정렬은 어떤 방식으로 수행될까요? 버블 정렬 버블 정렬은 정렬 알고리즘 중 하나입니다. 버블 정렬의 개념부터 먼저 말하자면 버블 정렬은 두 개의 인접한 자료 값을 비교하면서 인덱스를 변경하는 방식입니다. 다음과 같은 리스트를 예로 들어보겠습니다. a라는 리스트에 담긴 값은 순서대로 4 3 1 5 2 입니다. 이 값을 버블 정렬의 개념을 이용해서 오름차순으로 정렬해볼까요? 일단 첫 두자리를 비교합니다. 4 3 1 5 2 첫 번째 숫자가 두 번째 숫자보다 크기 때문에 두 숫자의 위치를 변경합니다. 3 4 1 5 2 자 이제 다음 두 수를 비교.. 2022. 4. 23.
모두를 위한 컴퓨터 과학(CS50) - 검색 알고리즘 위와 같은 서랍이 있다고 치자. 우리는 서랍이 모두 열려 있다고 가정할 때 해당 서랍에 어떤 내용물이 들어있는지 한눈에 파악할 수 있다. 하지만 이것은 인간의 얘기..! 컴퓨터는 인간과 달리 전체를 파악하는 능력이 없다. 그렇다면 컴퓨터는 저 서랍에 어떻게 접근하는 것일까? 선형 검색(Linear Search) 떠올릴 수 있는 가장 쉬운 방법이 선형 검색일 것이다. 쉽게 말해 서랍의 맨 윗칸부터, 즉 첫 번째 인덱스부터 마지막 칸(마지막 인덱스)까지 열어보는 것이다. 이를 깔끔하게 정리해서 표현하자면 배열의 인덱스를 처음부터 끝까지 하나씩 증가시키면서 검색하는 것을 말한다. 파이썬으로 선형 검색의 간단한 예제를 만들어 보자 우선 a라는 이름의 리스트를 만들었다. 즉, 위에서 말한 서랍을 만들고 각 서랍에.. 2022. 4. 21.
반응형