본문 바로가기

Python/프로그래머스

(17)
[프로그래머스] [Python] 더 맵게 문제 풀이 def solution(scoville, K): answer = 0 # 리스트를 heapq 형식으로 변경 heapq.heapify(scoville) # heapq 형식이기 때문에 가장 작은 값이 [0]위치에 온다. 이 값이 K보다 작으면 while scoville[0] < K: try: # 스코빌 지수 공식 대입 heapq.heappush(scoville, heapq.heappop(scoville) + heapq.heappop(scoville) * 2) answer += 1 # 인덱스 에러가 났을 경우. 즉 끝까지 돌았음에도 여전히 scoville[0] < 인 경우에는 -1을 리턴한다 except IndexError: return -1 return answer 문제 링크 programmers...
[프로그래머스] [Python] 프린터 문제 풀이 def solution(priorities, location): answer = 0 # enumerate를 사용하여 고유번호를 부여. 이후 찾고자 하는 location과 대응된다. priorities = [i for i in enumerate(priorities)] while True: # 맨 앞을 가져온다. 맨 앞이 가장 큰 값일 때는 그냥 빠지기만 한다. current_top = priorities.pop(0) # 현재 맨 앞의 값이 다른 값보다 작다면 if any(current_top[1] < p[1] for p in priorities): # 다시 배열에 넣어주도록 하자 priorities.append(current_top) # 해당 값이 가장 큰 값이라면 else: # 맨 앞은 whi..
[프로그래머스] [Python] 다리를 지나는 트럭 문제 풀이 def solution(bridge_length, weight, truck_weights): # answer += bridge_length를 할 것이기 때문에 그냥 처음부터 다리 길이를 answer에 넣었다. answer = bridge_length # 현재 다리 위에 있는 트럭의 무게 current_weight = 0 # 현재 다리 위에 있는 트럭의 배열 truck_on_bridge = list() # 각 트럭을 반복문으로 돌면서 for i in range(len(truck_weights)): truck = truck_weights[i] while True: # 다리에 트럭이 한 대도 없으면 if not truck_on_bridge: # 트럭이 다리위에 올라가고 해당 트럭의 무게를 추가. 시..
[프로그래머스] [Python] 기능 개발 문제 풀이 def solution(progresses, speeds): answer = [] # 진도율을 day로 표현 day = 1; # progresses가 빌 때까지(progresses에 값이 있다면) while progresses: # 완료된 작업의 개수 complete = 0 for i in range(len(progresses)): # 하단 설명 참조 if (progresses[0] + (speeds[0] * day)) >= 100: complete += 1 progresses.pop(0) speeds.pop(0) # 완료된 작업이 있다면 if complete != 0: answer.append(complete) # 진도율 증가 day += 1 return answer 우선 progresses..
[프로그래머스] [Python] 주식가격 문제 풀이 def solution(prices): # 인덱스 오류가 나지 않도록 answer를 0으로 초기화 answer = [0 for i in prices] for i in range(len(prices)): # i 다음부터 검사하면 되기 때문에 i + 1부터 시작한다. for j in range(i + 1, len(prices)): # i보다 크거나 같으면 계속 더해주고 if prices[j] >= prices[i]: answer[i] += 1 # i보다 작더라도 1초 더(루프를 한번 더) 돌았기 때문에 1을 더해주고 break else: answer[i] += 1 break return answer 문제 링크 programmers.co.kr/learn/courses/30/lessons/42584?..
[프로그래머스] [Python] 베스트앨범 문제 풀이 from collections import defaultdict def solution(genres, plays): answer = [] # int값을 value로 가진 딕셔너리 생성 play_count_by_genre = defaultdict(int) # list를 value로 가진 딕셔너리 생성 songs_in_genre = defaultdict(list) # 고유번호 생성 index = [i for i in range(len(genres))] for song_id, genre, play in zip(index, genres, plays): # 가장 많이 재생된 장르를 찾기 위해 각 장르가 몇번 재생되었는지 체크 play_count_by_genre[genre] += play # 해당 장르에..
[프로그래머스] [Python] 위장 문제 풀이 def solution(clothes): answer = 1 arr = list() # 배열 arr에 옷의 종류(key)만 넣어줌 for val, key in clothes: arr.append(key) # 중복을 제거하기 위해 set을 사용. 이렇게 하면 옷의 종류 하나씩만 남게 됨 s = set(arr) cnt = list() # 옷의 개수를 cnt배열에 추가 for i in s: cnt.append(arr.count(i)) # 하단 설명 참조 for i in cnt: answer *= (i + 1) answer -= 1 return answer 여기에서는 (a+1)(b+1)(c+1)...-1라는 공식을 사용하였습니다. 예를 들어 headgear가 5개, eyewear가 3개 있다고 해봅시..
[프로그래머스] [Python] 전화번호 목록 문제 풀이 def solution(phone_book): answer = True # 배열 정렬 phone_book = sorted(phone_book) # 첫번째 원소를 접두어로 삼아 검사 f = phone_book[0] for i in phone_book[1:]: if f in i: answer = False break return answer 이렇게 풀어도 전부 통과가 나오는데, 가만 생각해보면 {"12", "23", "234"} 등의 배열과 같이 첫 번째 원소가 아니라 그 이후의 원소가 접두어가 되는 경우가 생길 수 있다. 해서 다른 사람이 푼 코드를 보았는데 def solution(phoneBook): phoneBook = sorted(phoneBook) for p1, p2 in zip(phon..