Computer Science/Algorithm(6)
-
[힙] 프로그래머스 이중우선순위큐 파이썬 풀이
이중우선순위큐 파이썬 풀이 접근 방법 문제 상에서 operation의 최대값과 최소값을 Delete하는 연산엔 pop과 heappop을 섞어 풀면 되지않을까 싶어서 요구사항대로, 케이스별로 풀었다. 1차 작성 코드 import heapq as hq def solution(op): q = [] for i in op: ins, num = i.strip().split() if ins == 'I': hq.heappush(q, int(num)) elif ins == 'D' and q: if num == '-1': hq.heappop(q) elif num == '1': q.pop() return [max(q), min(q)] if q else [0,0] operation이 op라는 배열로 주어졌을 때, 각 명령어의..
2023.05.09 -
[스택/큐] 프로그래머스 프로세스 파이썬 풀이
프로세스 파이썬 풀이 문제설명 운영체제의 역할 중 하나는 컴퓨터 시스템의 자원을 효율적으로 관리하는 것입니다. 이 문제에서는 운영체제가 다음 규칙에 따라 프로세스를 관리할 경우 특정 프로세스가 몇 번째로 실행되는지 알아내면 됩니다. 실행 대기 큐(Queue)에서 대기중인 프로세스 하나를 꺼냅니다. 큐에 대기중인 프로세스 중 우선순위가 더 높은 프로세스가 있다면 방금 꺼낸 프로세스를 다시 큐에 넣습니다. 만약 그런 프로세스가 없다면 방금 꺼낸 프로세스를 실행합니다. 한 번 실행한 프로세스는 다시 큐에 넣지 않고 그대로 종료됩니다. 예를 들어 프로세스 4개 [A, B, C, D]가 순서대로 실행 대기 큐에 들어있고, 우선순위가 [2, 1, 3, 2]라면 [C, D, A, B] 순으로 실행하게 됩니다. 현재 ..
2023.05.09 -
[스택/큐] 프로그래머스 올바른 괄호 - 파이썬
올바른 괄호 파이썬 풀이 문제설명 괄호가 바르게 짝지어졌다는 것은 '(' 문자로 열렸으면 반드시 짝지어서 ')' 문자로 닫혀야 한다는 뜻입니다. 예를 들어"()()" 또는 "(())()" 는 올바른 괄호입니다. ")()(" 또는 "(()(" 는 올바르지 않은 괄호입니다. '(' 또는 ')' 로만 이루어진 문자열 s가 주어졌을 때, 문자열 s가 올바른 괄호이면 true를 return 하고, 올바르지 않은 괄호이면 false를 return 하는 solution 함수를 완성해 주세요. 제한 사항 문자열 s의 길이 : 100,000 이하의 자연수 문자열 s는 '(' 또는 ')' 로만 이루어져 있습니다. 입출력 예제 s answ..
2023.04.14 -
[스택/큐] 프로그래머스 기능개발 - 파이썬
기능개발 파이썬 풀이 문제설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. 제한 사항 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. 작업 진도는 100 미만의 자연수입니다. 작업 속도..
2023.04.14 -
허프만 알고리즘으로 문자열 압축하기, Huffman Algorithm Encoding
우리는 컴퓨터로 알파벳을 유용하게 표현하기 위해 extended ASCII code 를 이용해 8bit (1byte)에 저장해 사용한다. 예를 들어 문자 'A'는 ASCII code로 '65'이고, binary code로 나타내면 '01000001'이다. 이를 표로 나타낸 이미지를 아래에 가져와보았다. 만약에 우리가 "BCCABBDDAECCBBAEDDCC"라는 20개의 문자를 별도의 압축 과정없이 전 컴퓨터에게 전송한다 생각해보자. 한 문자는 8bit이므로, 이 문자들은 총 160bits를 사용한다. 이 문자중에는 반복해서 등장하는 알파벳이 존재하기 때문에, 반복하는 각각의 문자를 'Encoding'하여 binary code를 압축시키면 8bit전체를 사용할 필요가 없다. 앞 문장에선 5가지의 알파벳이 ..
2022.04.16 -
[알고리즘을 위한 수학이론] 유클리드 호제법을 PS에 적용하기 -1 (Ft. C++)
유클리드 호제법 학교에서 수학을 배울 때 정수 단원에서 잠깐 소개되었었던 그 이론을 다시 알아보고, 백준 문제와 함께 천천히 익혀보자. 두 개의 양수 a와 b의 최대공약수를 구하려면 "a와 b를 소인수분해"하면 된다. 이 때 손으로 하나하나 인수분해하며 푸는 방법도 있지만, 사람이 계산할 수 없을 만큼 매우 큰 두 수의 최대 공약수를 구해야한다면 컴퓨터를 이용해야한다. 이를 위해 PS에선 "유클리드 호제법"을 사용한다. 유클리드 호제법에 대한 이론적인 설명은 다음과 같다. (출처: 수학독본, 한길사) 두 양수 a, b가 있고 a>=b일때, a를 b로 나눈 몫을 q, 나머지를 r이라고 하자. a = b*q+r 00이라면 위 식에서 r = a - b*q 이고, a와 b의 임의의 공약수 e가 있다고 할 때 우..
2022.02.28