본문 바로가기

분류 전체보기

(160)
[백준 / 큐] 1966 : 프린터 큐 (python) 문제 설명 문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 Queue 자료구조에 쌓여서 FIFO - First In First Out - 에 따라 인쇄가 되게 된다. 하지만 상근이는 새로운 프린터기 내부 소프트웨어를 개발하였는데, 이 프린터기는 다음과 같은 조건에 따라 인쇄를 하게 된다. 현재 Queue의 가장 앞에 있는 문서의 ‘중요도’를 확인한다. 나머지 문서들 중 현재 문서보다 중요도가 높은 문서가 하나라도 있다면, 이 문서를 인쇄하지 않고 Queue의 가장 뒤에 재배치 한다. 그렇지 않다면 바로 인쇄를 한다. 예를 들어 Queue에 4개의 문서(A B C D)가 있고, 중..
[4일차] 03 자료구조 : 03-5 스택과 큐 함께 푼 문제 [백준 / 큐] 10828 : 스택 (python) 문제 설명 문제 정수를 저장하는 스택을 구현한 다음, 입력으로 주어지는 명령을 처리하는 프로그램을 작성하시오. 명령은 총 다섯 가지이다. push X: 정수 X를 스택에 넣는 연산이다. pop: 스택에 delicious-kimchi.tistory.com [백준 / 큐] 1966 : 프린터 큐 (python) 문제 설명 문제 여러분도 알다시피 여러분의 프린터 기기는 여러분이 인쇄하고자 하는 문서를 인쇄 명령을 받은 ‘순서대로’, 즉 먼저 요청된 것을 먼저 인쇄한다. 여러 개의 문서가 쌓인다면 delicious-kimchi.tistory.com 스택 후입선출(LIFO) 깊이 우선 탐색에 효과적 후입선출 개념은 재귀 함수 알고리즘 원리와 일맥상..
[백준 / 투 포인터] 1306 : 달려라 홍준 (python) 풀이 import sys input = sys.stdin.readline N, M = map(int, input().split()) A = list(map(int, input().split())) strong = 0 answer = [] # 시야 초기 max 값 설정 strong = max(A[:M*2-1]) answer.append(strong) i, j = 1, M*2-1 while j != N: if strong != A[i-1]: if strong < A[j]: strong = A[j] else: strong = max(A[i:j+1]) answer.append(strong) i+=1 j+=1 print(*answer) 정답은 strong 배열에 저장했고, 시간(1초)마다 보이는 홍준의 시야에서 ..
[백준 / 투 포인터] 2003 : 수들의 합 2 (python) 풀이 import sys input = sys.stdin.readline N, M = map(int, input().split()) A = list(map(int, input().split())) i,j,cnt,sum = 0,0,0,A[0] while j != N: try: if sum M: sum-=A[i] i+=1 else: cnt+=1 sum-=A[i] i+=1 j+=1 sum+=A[j] except IndexError: break print(cnt) 투 포인터는 2개의 포인터로 알고리즘의 시간 복잡도를 최적화한다. 위 문제의 시간제한은 0.5초인데, N, M의 범위 값이 각각 N(1 ≤ N ≤ 10,000), M(1 ≤ M ≤ 300,00..
[백준 / DP] 1253 : 좋다 (python) 문제 설명 문제 N개의 수 중에서 어떤 수가 다른 수 두 개의 합으로 나타낼 수 있다면 그 수를 “좋다(GOOD)”고 한다. N개의 수가 주어지면 그 중에서 좋은 수의 개수는 몇 개인지 출력하라. 수의 위치가 다르면 값이 같아도 다른 수이다. 입력 첫째 줄에는 수의 개수 N(1 ≤ N ≤ 2,000), 두 번째 줄에는 i번째 수를 나타내는 Ai가 N개 주어진다. (|Ai| ≤ 1,000,000,000, Ai는 정수) 출력 좋은 수의 개수를 첫 번째 줄에 출력한다. 예제 입력 1 10 1 2 3 4 5 6 7 8 9 10 예제 출력 1 8 힌트 3,4,5,6,7,8,9,10은 좋다. 풀이 import sys input = sys.stdin.readline N = int(input()) A = sorted(..
[백준 / 구간 합 구하기] 11660 : 구간 합 구하기 5 (python) 문제 설명 문제 N×N개의 수가 N×N 크기의 표에 채워져 있다. (x1, y1)부터 (x2, y2)까지 합을 구하는 프로그램을 작성하시오. (x, y)는 x행 y열을 의미한다. 예를 들어, N = 4이고, 표가 아래와 같이 채워져 있는 경우를 살펴보자. 1 2 3 4 2 3 4 5 3 4 5 6 4 5 6 7 여기서 (2, 2)부터 (3, 4)까지 합을 구하면 3+4+5+4+5+6 = 27이고, (4, 4)부터 (4, 4)까지 합을 구하면 7이다. 표에 채워져 있는 수와 합을 구하는 연산이 주어졌을 때, 이를 처리하는 프로그램을 작성하시오. 입력 첫째 줄에 표의 크기 N과 합을 구해야 하는 횟수 M이 주어진다. (1 ≤ N ≤ 1024, 1 ≤ M ≤ 100,000) 둘째 줄부터 N개의 줄에는 표에 채..
[백준 / 리스트] 25966 : 배찬우는 배열을 좋아해 (python) 문제 설명 문제 찬우는 오늘 프로그래밍 기초 강의에서 2차원 배열에 대해 배웠다. 너무 재미있던 찬우는 2차원 배열에다 연산을 진행하기로 결심했다. 아래와 같은 두 가지 종류의 연산이 쿼리로 주어진다. 0 i j k : i번 행의 j번 열의 값을 k로 바꾼다. 1 i j : i번 행과 j번 행을 swap한다. swap 이란 i번 행의 모든 원소와 j번 행의 모든 원소를 바꾸는 연산이다. q개의 쿼리를 수행한 후 바뀐 배열의 최종 결과를 출력하시오. 출력 q개의 쿼리를 전부 수행한 후의 2차원 배열을 출력한다. 예제 입력 1 4 3 4 # 행의 개수, 열의 개수, 쿼리 개수 10 3 8 # 2차원 배열 (4x3) 2 10 4 # 2차원 배열 (4x3) 1 8 4 # 2차원 배열 (4x3) 1 4 2 # 2..
[프로그래머스 코딩테스트 고득점 Kit / 탐욕법(Greedy)] 구명보트 (python) 풀이 def solution(people, limit): answer = 0 people.sort() frontIdx = 0 while people and frontIdx < len(people): leftLimit = limit leftLimit -= people.pop() answer += 1 try: if people[frontIdx]

반응형