본문 바로가기
728x90
반응형

백준34

[알고리즘] 이진 탐색(Binary Search) 이진 탐색 알고리즘(binary search algorithm)은 오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘이다.  처음에 중간의 값을 임의의 값으로 선택하여 그 값과 찾고자 하는 값의 크고 작음을 비교하여 찾고자 하는 값을 찾아간다. 처음 선택한 중앙값이 만약 찾는 값보다 크면 그 값은 새로운 최댓값이 되며, 작으면 그 값은 새로운 최솟값이 된다.   이제 이진 탐색 맛보기를 해보자! 단어가 아주 많이 있는 영어사전에서 Program 이라는 단어를 찾는다고 가정해보자. 단, P 로 시작하는 단어의 첫 페이지로 가지 않고, 사전을 펼치는 작업을 반복해서 찾아보자. 물론, 펼치는 횟수가 적을 수록 좋다. 어떤 페이지를 펼치는 것이 좋을까?가장 좋은 방법은 전체 페이지의 반이 되는 페이.. 2024. 8. 18.
[백준/Python] 1966 프린터 큐 문제: https://www.acmicpc.net/problem/1966  사용 알고리즘: 큐  입력첫 줄에 테스트케이스 수각 테스트케이스별로첫 줄에는 N (1 두번째 줄에는 N 개의 문서의 중요도가 차례로 주어짐 (1 이상 9 이하의 정수, 같은 중요도가 있을 수 있음) 규칙1. 현재 큐의 맨 앞에 있는 문서의 중요도를 확인2. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 큐의 가장 뒤에 배치하고 그렇지 않다면 바로 인쇄  전체 코드from collections import dequeimport sysinput = sys.stdin.readlineT = int(input()) # 테스트케이스 수for _ in range(T): N, M = map.. 2024. 8. 8.
[백준/Python] 2164 카드2 문제: https://www.acmicpc.net/problem/2164  사용 알고리즘: 덱  입력첫째 줄에 정수 N (1  N 장의 카드가 순서대로 쌓여있을 때, 카드가 한 장만 남을 때까지 아래의 동작을 반복1. 맨 위에 있는 카드 제거2. 제거되고 맨 위로 나온 카드를 맨 아래에 넣음 -> 앞뒤로 추가/제거가 가능하니 덱을 사용해 구현해야겠다  이 문제는 정말 문제대로만 구현하면 되는 간단한 문제였다.  대신 for 문을 N 회가 아닌 (N-1) 회 돌아야 한다. (덱에 카드가 1장 남았을 때 종료해야 하므로)d = deque(i for i in range(1,N+1)) # 덱에 1~N 번의 카드를 미리 넣음for i in range(1, N): d.popleft() # 맨 위 카드 제거 .. 2024. 8. 5.
[백준/Python] 11866 요세푸스 문제 0 문제: https://www.acmicpc.net/problem/11866  사용 알고리즘: 덱  입력첫째 줄에 N 과 K 가 빈 칸을 사이에 두고 순서대로 주어짐 (1   1 번부터 N 번까지 N 명의 사람이 원을 이루며 앉아있을 때, N 명의 사람이 모두 제거될 때까지 K 번째 사람을 제거해 나감.-> 앞 뒤로 추가/제거가 가능한 덱을 사용해서 원처럼 동작하도록 구현 입력이 7 3 인 경우,1 2 3 4 5 6 7 의 숫자를 가진 사람들이 원을 그리며 앉아 있을 때, 3 번째 사람을 계속해서 제거해 나가야 한다. - 1 을 제거하고 다시 뒤에 붙임 2 3 4 5 6 7 1 - 2를 제거하고 다시 뒤에 붙임3 4 5 6 7 1 2 - 3을 제거 (K = 3)4 5 6 7 1 2  for 문을 돌면서 K.. 2024. 8. 5.
728x90
반응형