파이썬 51

[Python] 더 맵게

1. 문제 2. 풀이과정 방법 1) heapq 내장 모듈 활용 import heapq def solution(scoville, K): answer = 0 heapq.heapify(scoville) while scoville[0] < K: if len(scoville) == 1: return -1 answer += 1 #가장 안매운거, 두 번째 안매운거 heap에서 빼서 연산 a = heapq.heappop(scoville) + heapq.heappop(scoville)*2 #섞은거 넣기 heapq.heappush(scoville, a) return answer 방법 2) heapq대신 deque만 이용하였다. 섞은 결과는 새로운 배열 mix에 따로 저장하여 scoville와 mix의 맨 앞 원소만 비교하..

[Python] 주식 가격

1. 문제 2. 풀이 과정 방법 1) 직관적으로 생각나는 방법, 자신보다 뒤에 있는 값을 하나씩 확인해서 계산한다. 시간복잡도 O(%{n}^2%) def solution(prices): answer = [] for i in range(len(prices)): for j in range(i+1, len(prices)): if prices[i] > prices[j]: answer.append(j-i) break if len(answer)-1 < i: answer.append(len(prices)-1-i) return answer 방법 2) stack을 이용해서 더 빨리 계산한다. 코드 실행 과정 예시 입력 : [1, 2, 3, 2, 1] stack [(1, 0)] [(1, 0), (2, 1)] [(1, 0)..

[Python] 다리를 지나는 트럭

1. 문제 2. 풀이과정 방법 1) 큐에 [트럭 무게, 위치]를 넣고, 반복문 한 번 돌 때마다 위치를 1 감소시켜서 위치 값이 1이 되면 트럭이 다리에서 나간다. 변수 c는 다음에 기다리는 트럭의 truck_weights에서의 인덱스 값을 나타낸다. from collections import deque def solution(bridge_length, weight, truck_weights): answer = 1 Q = deque() #다리 Q.append([truck_weights[0], bridge_length]) sum = truck_weights[0] c = 1 while Q: answer += 1 if Q[0][1] == 1:#다리 출발(bridge_length)에서 끝(1)까지 도착하면 po..

[Python] 프린터

1. 문제 2. 풀이 과정 방법 1) 큐에서 하나 꺼낼 때마다 location을 1 감소시켜서 현재 위치를 업데이트한다. from collections import deque def solution(priorities, location): Q = deque() for i in priorities: Q.append(i) count = 0 while Q: a = Q.popleft() if Q and a < max(Q): Q.append(a) else: count += 1 if location == 0: return count location -= 1 if location < 0 : location = len(Q)-1 return count 방법 2) 큐에 처음 인덱스 정보와 데이터를 함께 저장하고, any를..

[Python] 기능 개발

1. 문제 2. 풀이 과정 방법 1) 남은 날짜 계산할 때, 나머지가 있으면 올리도록 한다. 최대 날짜가 갱신되면 바로 출력한다. def solution(progresses, speeds): answer = [] max_day = 0 pre_idx = 0 for i in range(len(progresses)): temp = 100 - progresses[i] day = temp//speeds[i] if temp % speeds[i] != 0: day += 1 if max_day < day: #최대 걸리는 날보다 크면 그 앞의 기능들 먼저 배포 max_day = day if i != 0: answer.append(i-pre_idx) pre_idx = i if i==len(progresses)-1: #마지..

[Python] 위장

1. 문제 2. 풀이 과정 방법 1) hash 자료구조를 이용해서 옷 종류별로 몇 개씩 있는지 count한 후, 특정 종류는 선택 안 할 경우도 있으니 각 종류별로 안 입을 경우를 1씩 더해서 조합의 개수를 count한다. 여기서 모두 선택 안 할 경우 1가지를 빼주면 결과값이 된다. def solution(clothes): answer = 1 hash_map = {} #종류별로 개수 count for i in clothes: if i[1] in hash_map: hash_map[i[1]] += 1 else: hash_map[i[1]] = 1 #결과 계산 arr = list(hash_map.values()) for i in arr: answer *= (i+1) return answer-1 방법 2) 논리..

[Python] 전화번호 목록

1. 문제 2. 풀이 과정 방법 1) 정렬해서 인접한 요소만 비교하기 *str.starts.with("접두어") : 특정 문자열로 시작하는지 확인하는 함수 def solution(phone_book): phone_book.sort() for i in range(len(phone_book)-1): if phone_book[i+1].startswith(phone_book[i]): return False return True 방법 2) 해쉬 맵 사용하기 리스트에서 특정 요소가 있는지 확인하는 것보다 set, dict에서 확인하는 것이 더 빠르다. number in phone_book으로 해도 답은 나오지만, number in hash_map을 사용하는 이유이다. def solution(phone_book): ..

[Python] 완주하지 못한 선수

1. 문제 2. 풀이 과정 방법 1) 아스키코드를 기준으로 정렬한 후, 앞에서부터 순차 탐색한다. def solution(participant, completion): participant.sort() completion.sort() answer = '' for i in range(len(completion)): if participant[i] != completion[i]: answer = participant[i] break if answer == '': answer = participant[-1] return answer 방법 2) collections 라이브러리 활용하기 collections.Counter(배열) => 사전 형태로 {'배열 속의 데이터' : 개수, ... } 를 반환한다.빼기 연산..

[Python_Search] 백준 2470번 : 두 용액

1. 문제 https://www.acmicpc.net/problem/2470 2470번: 두 용액 첫째 줄에는 전체 용액의 수 N이 입력된다. N은 2 이상 100,000 이하이다. 둘째 줄에는 용액의 특성값을 나타내는 N개의 정수가 빈칸을 사이에 두고 주어진다. 이 수들은 모두 -1,000,000,000 이상 1,000,00 www.acmicpc.net 2. 풀이 과정 n = int(input()) A = list(map(int, input().split())) A.sort() l = 0 r = n-1 result = [A[l], A[r]] while l < r: a = A[l] + A[r] if abs(a) < abs(sum(result)): #절댓값이 제일 작은 값 저장 result = [A[l],..