본문 바로가기

알고리즘/프로그래머스

(45)
[프로그래머스][Python] 기능개발 문제를 정리해보자. 1. 각 기능은 진도가 100%일 때, 서비스에 반영한다. 2. 각 기능의 개발 속도는 모두 다르다. 3. 뒤에 개발이 먼저 완료되어도, 앞에 기능이 배포될 때 함께 배포해야 한다. 배포 순서대로 작업 진도 적힌 배열 : progresses 각 작업의 개발 속도 적힌 배열 : speeds 문제는 '배포마다 몇 개의 기능이 배포되는지' 찾는 것이다. def solution(progresses, speeds): answer = [] while progresses: progresses = list(map(lambda x1, x2: x1 + x2, progresses, speeds)) result = 0 while progresses: if 100
[프로그래머스][Python] 베스트앨범 문제를 정리해보자. 노래를 수록해야 한다. 그 기준은 아래와 같다. 1. 속한 노래가 많이 재생된 장르를 먼저 수록한다. 2. 장르 내에서 많이 재생된 노래를 먼저 수록한다. (재생 횟수가 같다면? 고유 번호가 낮은 노래를 먼저 수록한다.) 1번과 2번을 위한 딕셔너리를 각각 만들었다. 전자는 genres_sum, 후자는 genres_two_plays. 1번은 각 장르의 노래 재생 수를 다 더하면 된다. 2번은 조건문을 이용했다. 아래 예시로 설명하겠다. classic은 500, 150, 800을 가지고 있다. 그리고 pop은 600, 2500을 가지고 있다. classic은 800, 500, 150 순서가 되어야하고, 2개만 선택해야 하니까 800, 500만 남아야 한다. 따라서 재생 수가 높은 순으로..
[프로그래머스][Python] 위장 조합을 이용했다. (조합은 서로 다른 n개에서 순서에 상관없이 r개를 선택하는 것이다.) 예를 들어보자. 2개의 모자 종류와 1개의 안경은 종류가 있다. 아래와 같이 경우의 수를 구할 수 있다. 문제에서 '스파이는 하루에 최소한 한 개의 의상은 입습니다'라고 했다. 따라서 아무것도 안 입는 경우를 제외시켜야 한다. 빨간색으로 표시한 부분이 그 부분이다. (Π (의상 종류 + 1)) - 1 식은 이와 같다. def solution(clothes): dic = {} for li in clothes: c, k = li if dic.get(k, 0): dic[k] += 1 else: dic[k] = 2 answer = 1 for val in dic: answer *= dic[val] return answer -..
[프로그래머스][Python] 전화번호 목록 백준에서 트라이로 푼 문제이다. 이번엔 다른 사람 풀이를 분석해보자. def solution(phoneBook): phoneBook = sorted(phoneBook) for p1, p2 in zip(phoneBook, phoneBook[1:]): print(p1, p2) if p2.startswith(p1): return False return True print(solution(["12", "1235", "567", "88"])) 내장 함수에 대해 알아보자. 1. zip 순회할 수 있는 객체들을 받는다. 각 객체가 가지고 있는 원소를 Tuple 형태로 차례로 접근할 수 있는 반복자를 반환한다. (반복자란 내부의 요소를 순회하는 객체이다.) 2. startswith(시작 문자, 시작 지점) 문자열이 특..
[프로그래머스][Python] 완주하지 못한 선수 완주자의 이름을 key로 인원수를 value로 잡고, c_dic에 저장했다. 그리고 참가자 이름을 하나씩 꺼내서 비교했다. key에 해당 참가자 이름이 없거나 value에 해당 참가자 수가 0명이면, 그 사람은 완주하지 못한 참가자이다. def solution(participant, completion): c_dic = {} for key in completion: if not c_dic.get(key, 0): c_dic[key] = 1 else: c_dic[key] += 1 for key in participant: if (not c_dic.get(key, 0)) or c_dic[key] == 0: return key else: c_dic[key] -= 1 입력으로 'Hello'가 들어왔을 때, 'H'..