알고리즘216 [프로그래머스] 이중우선순위큐 - 파이썬(python) 문제 설명 이중 우선순위 큐는 다음 연산을 할 수 있는 자료구조를 말합니다. 명령어수신 탑(높이) I 숫자 큐에 주어진 숫자를 삽입합니다. D 1 큐에서 최댓값을 삭제합니다. D -1 큐에서 최솟값을 삭제합니다. 이중 우선순위 큐가 할 연산 operations가 매개변수로 주어질 때, 모든 연산을 처리한 후 큐가 비어있으면 [0,0] 비어있지 않으면 [최댓값, 최솟값]을 return 하도록 solution 함수를 구현해주세요. 제한사항 operations는 길이가 1 이상 1,000,000 이하인 문자열 배열입니다. operations의 원소는 큐가 수행할 연산을 나타냅니다. 원소는 “명령어 데이터” 형식으로 주어집니다.- 최댓값/최솟값을 삭제하는 연산에서 최댓값/최솟값이 둘 이상인 경우, 하나만 삭제합.. 알고리즘/Heap 힙 2022. 9. 4. [프로그래머스] 디스크 컨트롤러 - 파이썬(python) 문제 설명 하드디스크는 한 번에 하나의 작업만 수행할 수 있습니다. 디스크 컨트롤러를 구현하는 방법은 여러 가지가 있습니다. 가장 일반적인 방법은 요청이 들어온 순서대로 처리하는 것입니다. 예를들어 - 0ms 시점에 3ms가 소요되는 A작업 요청 - 1ms 시점에 9ms가 소요되는 B작업 요청 - 2ms 시점에 6ms가 소요되는 C작업 요청 와 같은 요청이 들어왔습니다. 이를 그림으로 표현하면 아래와 같습니다. 한 번에 하나의 요청만을 수행할 수 있기 때문에 각각의 작업을 요청받은 순서대로 처리하면 다음과 같이 처리 됩니다. - A: 3ms 시점에 작업 완료 (요청에서 종료까지 : 3ms) - B: 1ms부터 대기하다가, 3ms 시점에 작업을 시작해서 12ms 시점에 작업 완료(요청에서 종료까지 : 11.. 알고리즘/Heap 힙 2022. 9. 4. [프로그래머스] 문자열 다루기 기본 - 파이썬(python) 나의 풀이 def solution(s): if len(s) == 4 or len(s) == 6 : for i in s : if i >='0' and i 알고리즘/이것저것 2022. 9. 4. 파이썬에서 pass 쓰는 이유 다른 분들의 코드를 보면 조건문 혹은 반복문에서 pass 를 쓰는 경우를 종종 보았다. continue 와 비슷한 역할을 하나..? 싶었는데 아니였다. pass문은 코드는 필요하지만, 아무 작업도하지 않기를 원할 때 사용된다. 나중에 코드를 추가 할 계획이거나 , 예외가 발생했을 때 처리하되, 아무 수행을 하지 않고 무시하는 데 사용할 수 있다. ex) def solution(x): if x > 0: print('0보다 크다') else: #나중에 추가할 것 def divide(x, y): z = None try: z = x/y except: pass # ZeroDivisionError가 발생했을 때 처리하되, 어떠한 수행도 하지 않음 return z divide(6,0) 출처 : https://www... 알고리즘/이것저것 2022. 9. 4. [프로그래머스] 서울에서 김서방 찾기 - 파이썬(python) / 파이썬 리스트 관련 함수 정리 나의 풀이 def solution(seoul): return "김서방은 "+str(seoul.index("Kim"))+"에 있다" 파이썬에서 list.index("찾고자 하는 것") 을 하면, list에서 찾고자 하는 값과 정확히 일치하는 첫번째 값의 index 값을 반환한다. 파이썬 리스트 관련 함수 출처 : https://wikidocs.net/14#_11 리스트에 요소 추가(append) append(x)는 리스트의 맨 마지막에 x를 추가하는 함수이다. >>> a = [1, 2, 3] >>> a.append(4) >>> a [1, 2, 3, 4] 리스트 정렬(sort) sort 함수는 리스트의 요소를 순서대로 정렬해 준다. >>> a = [1, 4, 3, 2] >>> a.sort() >>> a [1.. 알고리즘/이것저것 2022. 9. 4. [프로그래머스] 소수 찾기 - 파이썬(python) 시간 초과 def solution(n): answer = 0 # 약수가 1,n을 제외하고 없다면 소수 for i in range(2,n+1) : for j in range(2, i) : if i % j == 0 : break elif j==i-1 : answer += 1 if i >= 2 : answer += 1 return answer 가장 간단한 방법으로 구현하였다. 이중 for문으로 주어진 숫자 n에 대해서 2~n-1 까지 나눠지는 숫자가 있다면 소수가 아닌것으로 판별하였는데, 시간 초과로 실패하였다. 이는 숫자가 매우 커진다면 아주 비효율적이기 때문이다. 통과한 풀이 약수의 특징을 이용한 풀이이다. 약수는 항상 짝을 이루기 때문에, 약수를 구하려면 해당 숫자의 제곱근(루트) 까지만 나눠지는지 확인.. 알고리즘/이것저것 2022. 9. 4. [프로그래머스] 더 맵게 - 파이썬(python) 나의 풀이 from heapq import heapify, heappush, heappop def solution(scoville, K): answer = 0 heapify(scoville) while True : if scoville[0] >= K : break elif len(scoville) < 2: answer = -1 break else : heappush(scoville, heappop(scoville) + heappop(scoville)*2) answer += 1 return answer 처음에는 sort() 를 이용한 정렬로 풀었는데, 효율성 테스트에서 가차없이 실패하였다. 따라서 heapq를 이용해서 같은 로직으로 다시 풀어보았다. scoville 리스트를 heapify() 를 이용하여 .. 알고리즘/Heap 힙 2022. 9. 3. [프로그래머스] 주식가격 - 파이썬(python) 시간 초과된 풀이 def solution(prices): answer = [] q = [(i,j) for i,j in enumerate(prices[::-1])] for i in range(len(q)) : tmp = list(filter(lambda x: x[1] < q[i][1], q[:i]))[-1:] if tmp == [] : answer.append(i) else : answer.append(i-tmp[0][0]) return answer[::-1] 처음에는 주어진 prices 를 역순하여 (인덱스, 가격) 으로 저장하였다. 그런다음, filter 를 사용하여 해당 인덱스 보다 앞에서 더 큰 가격 중 가장 마지막 가격과의 인덱스 차이를 저장하였다. 한편, 앞에서 나보다 더 큰 가격이 없었다면 가.. 알고리즘/스택,큐 2022. 9. 3. [프로그래머스] 다리를 지나는 트럭 - 파이썬(python) 나의 풀이 def solution(bridge_length, weight, truck_weights): count = len(truck_weights) crossing = [] # [트럭무게, 현재 몇칸을 지나고 있는지] complete = [] # 다리를 다 건넌 트럭 무게 time = 0 while count != len(complete) : if truck_weights : if len(crossing) < bridge_length and sum([i[0] for i in crossing]) + truck_weights[0] = bridge_length : complete.append(crossing[0][0]) crossing.pop(0) return (time+1) 시간이 많이 걸렸는데, 어떻게.. 알고리즘/스택,큐 2022. 9. 3. [프로그래머스] 수박수박수박수박수박수? - 파이썬(python) 나의 풀이 def solution(n): return "수박"*(n//2)+"수" if n%2 else "수박"*(n//2) 설명이 필요없는 직관적인 문제... 다른 풀이 def solution(n): s = "수박"*(n//2+1) return s[:n] 와우... "수박" 을 n//2 + 1만큼 미리 만들어놓고, n개만큼 짜르는 것이다.👍🏻 알고리즘/이것저것 2022. 9. 3. [프로그래머스] 문자열을 정수로 바꾸기 - 파이썬(python) 나의 풀이 def solution(s): if s[0] == '-' : return -(int(s[1:])) elif s[0] == '+' : return int(s[1:]) else : return int(s) return answer 맨 앞이 +,- 와 같은 부호로 시작하는 경우에는 1번째 인덱스부터 시작하는 문자열을 int형으로 바꾸고, 해당 부호 처리를 해주었다. 한편 부호가 없는 경우에는 그냥 문자열을 int 형으로 변환하였다. 다른 풀이 def solution(str): #함수를 완성하세요 a = int(str) return a 하핫,, 부호 처리를 해줄 필요가 없었다!! 문자열을 int() 형 처리해줄 때는 알아서 부호를 인식하나보다..! def solution(s): result = 0 f.. 알고리즘/이것저것 2022. 9. 3. [프로그래머스] 시저 암호 - 파이썬(python) 나의 풀이 def solution(s, n): answer = '' for i in s : if i == ' ' : answer += ' ' else : if ord(i) + n > ord('z') : answer += chr(ord('a') + (n-1-(ord('z')-ord(i)))) elif ord(i)>= ord('a') : answer += chr(ord(i) + n) elif ord(i) + n > ord('Z'): answer += chr(ord('A') + (n-1-(ord('Z')-ord(i)))) else : answer += chr(ord(i) + n) return answer 각 문자에 대해 조건을 나누어 처리하였다. 공백일 경우 그대로 공백을 추가한다. 만약 소문자일 때 n을 더.. 알고리즘/이것저것 2022. 9. 3. 이전 1 ··· 8 9 10 11 12 13 14 ··· 18 다음