본문 바로가기

알고리즘 문제풀이/프로그래머스 고득점 Kit23

[프로그래머스 고득점 Kit - 스택/큐] 1. 같은 숫자는 싫어 [프로그래머스 고득점 Kit] 같은 숫자는 싫어 문제 설명 배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한사항 배열 arr의 크기 : 1,000,000 이하의 자연.. 2023. 9. 29.
[프로그래머스 고득점 Kit - 해시] 5. 베스트 앨범 [프로그래머스 고득점 Kit] 베스트앨범 문제 설명 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 많이 재생된 장르를 먼저 수록합니다. 장르 내에서 많이 재생된 노래를 먼저 수록합니다. 장르 내에서 재생 횟수가 같은 노래 중에서는 고유 번호가 낮은 노래를 먼저 수록합니다. 노래의 장르를 나타내는 문자열 배열 genres와 노래별 재생 횟수를 나타내는 정수 배열 plays가 주어질 때, 베스트 앨범에 들어갈 노래의 고유 번호를 순서대로 return 하도록 solution 함수를 완성하세요. 제한사항 genres[i]는 고유번호가 i인 노래의 장르입니다. plays[i].. 2023. 9. 29.
[프로그래머스 고득점 Kit - 해시] 4. 의상 [프로그래머스 고득점 Kit] 의상 문제 설명 코니는 매일 다른 옷을 조합하여 입는것을 좋아합니다. 예를 들어 코니가 가진 옷이 아래와 같고, 오늘 코니가 동그란 안경, 긴 코트, 파란색 티셔츠를 입었다면 다음날은 청바지를 추가로 입거나 동그란 안경 대신 검정 선글라스를 착용하거나 해야합니다. 코니는 각 종류별로 최대 1가지 의상만 착용할 수 있습니다. 예를 들어 위 예시의 경우 동그란 안경과 검정 선글라스를 동시에 착용할 수는 없습니다. 착용한 의상의 일부가 겹치더라도, 다른 의상이 겹치지 않거나, 혹은 의상을 추가로 더 착용한 경우에는 서로 다른 방법으로 옷을 착용한 것으로 계산합니다. 코니는 하루에 최소 한 개의 의상은 입습니다. 코니가 가진 의상들이 담긴 2차원 배열 clothes가 주어질 때 서.. 2023. 9. 29.
[프로그래머스 고득점 Kit - 해시] 3. 전화번호 목록 [프로그래머스 고득점 Kit] 전화번호 목록 문제 설명 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조대 : 119 박준영 : 97 674 223 지영석 : 11 9552 4421 전화번호부에 적힌 전화번호를 담은 배열 phone_book 이 solution 함수의 매개변수로 주어질 때, 어떤 번호가 다른 번호의 접두어인 경우가 있으면 false를 그렇지 않으면 true를 return 하도록 solution 함수를 작성해주세요. 제한 사항 phone_book의 길이는 1 이상 1,000,000 이하입니다. 각 전화번호의 길이는 1 이상 20 이하입니다. 같은 전화번호가 .. 2023. 9. 29.
[프로그래머스 고득점 Kit - 해시] 2. 완주하지 못한 선수 [프로그래머스 고득점 Kit] 해시2. 완주하지 못한 선수 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. 제한사항 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. completion의 길이는 participant의 길이보다 1 작습니다. 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. 참가자 중에는 동명이인이 있을 수 있습니다. 입출력 예 설명 예제 #1 .. 2023. 9. 29.
[프로그래머스 고득점 Kit - 해시] 1. 폰켓몬 [프로그래머스 고득점 Kit] 해시1. 폰켓몬 문제 설명 당신은 폰켓몬을 잡기 위한 오랜 여행 끝에, 홍 박사님의 연구실에 도착했습니다. 홍 박사님은 당신에게 자신의 연구실에 있는 총 N 마리의 폰켓몬 중에서 N/2마리를 가져가도 좋다고 했습니다. 홍 박사님 연구실의 폰켓몬은 종류에 따라 번호를 붙여 구분합니다. 따라서 같은 종류의 폰켓몬은 같은 번호를 가지고 있습니다. 예를 들어 연구실에 총 4마리의 폰켓몬이 있고, 각 폰켓몬의 종류 번호가 [3번, 1번, 2번, 3번]이라면 이는 3번 폰켓몬 두 마리, 1번 폰켓몬 한 마리, 2번 폰켓몬 한 마리가 있음을 나타냅니다. 이때, 4마리의 폰켓몬 중 2마리를 고르는 방법은 다음과 같이 6가지가 있습니다. 첫 번째(3번), 두 번째(1번) 폰켓몬을 선택 첫 .. 2023. 9. 29.
[프로그래머스] 고득점 Kit - 완전 탐색 [내 풀이] # 굳이 sizes 다시 정의할 필요 없이, min, max만 활용하면 됐다. def solution(sizes): sizes = [sorted(x) for x in sizes] garo = max([x[0] for x in sizes]) sero = max([x[1] for x in sizes]) return garo * sero [참고 풀이] def solution(sizes): return max(max(x) for x in sizes) * max(min(x) for x in sizes) [내 풀이] def solution(answers): score = [0, 0, 0] p1 = [1, 2, 3, 4, 5] p2 = [2, 1, 2, 3, 2, 4, 2, 5] p3 = [3, 3, 1.. 2023. 6. 22.
[프로그래머스] 고득점 Kit - 힙 [내 풀이] # 최솟값이 계속 변화하고, 그것을 기준으로 알고리즘이 돌아가야함 => heapq 사용 # 런타임 에러: 아예 불가능한 경우 return -1 를 고려하지 않음 import heapq as hq def solution(scoville, K): scoville.sort() cnt = 0 while len(scoville) >= 2 and scoville[0] = K else -1 더보기 디큐는 https://yunaaaas.tistory.com/36 [내 풀이] # 큐로 한쪽.. 2023. 6. 15.
[프로그래머스] 고득점 Kit - 스택/큐 # 내 풀이 def solution(arr): answer = [] for x in arr: if answer == [] or answer[-1] != x: answer.append(x) return answer # 참고 풀이 # 빈 배열일 가능성이 있는 경우 슬라이싱 활용 # answer[-1] 은 빈 배열일 때 오류가 나지만, answer[-1:]은 오류가 나지 않는다. def solution(arr): answer = [] for x in arr: if answer[-1:] == [x]: continue answer.append(x) return answer # 내 풀이 def solution(progresses, speeds): time = [] for i, x in enumerate(progre.. 2023. 6. 13.
[프로그래머스] 고득점 Kit - 정렬 # 내 풀이 # 최초 테스트 케이스는 통과했지만 [454, 45] 같은 경우는 통과하지 못해서 실패했다. 검색해서 확인해보니 *3을 곱해서 이런 케이스를 걸러내는 작업을 한다. def solution(array, commands): return [sorted(array[i-1:j])[k-1] for i,j,k in commands] # 참고 풀이 # int 인 채로 놔두지 않고, str로 변환한 후에 작업을 시작한다: 문자열 비교와 정수 비교의 비교 방법 차이가 있기 때문이다. def solution(numbers): numbers = list(map(str, numbers)) numbers.sort(key=lambda x: x*3, reverse=True) return str(int(''.join(nu.. 2023. 6. 6.
[프로그래머스] 고득점 Kit - 해시 더보기 https://yunaaaas.tistory.com/46 # 특정 조건인 것들을 제거 하는 것 : Counter 활용해서 특정 조건을 뺄셈할 수 있었다. # 내 풀이 def solution(participant, completion): for par in participant: if par not in completion: return par # 해시 값으로 무슨 값이었는지 추적할 수 있다는 아이디어 def solution(participant, completion): dict = {} sumhash = 0 for part in participant: dict[hash(part)] = part sumhash += hash(part) for comp in completion: sumhash -= h.. 2023. 6. 4.