프로그래머스
-
[프로그래머스 42746번] 가장 큰 수Coding Test/프로그래머스 2020. 12. 21. 02:44
# 문제 내 풀이 - 시간초과, 수정 답안 def solution(numbers): numbers.sort(key=lambda x: str(x) * 3, reverse=True) return str(int(''.join(map(str, numbers)))) 원래의 내 풀이 - 완전 탐색으로 접근해 답은 맞으나 시간 초과 from itertools import permutations def solution(numbers): max_num = '0' # 만들 수 있는 가장 큰 수 저장 # 만들 수 있는 모든 수를 순열로 확인 p_numbers = permutations(numbers, len(numbers)) # 모든 경우의 수를 문자열 상태로 비교하며 가장 큰 수 탐색 for p in p_numbers: ..
-
[프로그래머스 42883번] 큰 수 만들기Coding Test/프로그래머스 2020. 12. 20. 02:36
# 문제 내 풀이 def solution(number, k): answer = '' idx = 0 # 매 단계에서 가장 큰 숫자의 인덱스 while k > 0: # 제거할 것이 있을 때까지 max_val = '-1' start_idx = idx # 이번 단계의 시작 인덱스를 기록 # 시작 인덱스부터 뒤로 k + 1개 만큼 탐색하여 가장 큰 수 찾음 for i in range(idx, idx + k + 1): if eval(number[i] + '>' + max_val): max_val = number[i] idx = i # 만일 찾은 수가 9라면 뒷 부분은 더 탐색하지 않고 루프 종료 if max_val == '9': break answer += number[idx] k -= idx - start_idx..
-
[프로그래머스 42578번] 위장Coding Test/프로그래머스 2020. 12. 19. 17:13
# 문제 내 풀이 - 문제 풀이 실패, 지향할 답안 def solution(clothes): answer = 1 # dictionary 형태로 재구성 c_dict = {} for val, key in clothes: if key in c_dict.keys(): c_dict[key].append(val) else: c_dict[key] = [val] # 안 입은 경우의 수를 포함해서 옷의 종류 별 개수들을 각각 곱함 for val in c_dict.values(): answer *= (len(val) + 1) return answer - 1 # 하나도 안 입은 경우의 수를 빼고 반환 주목할 점 Dictionary 자료형의 Value 값을 List 재구성하는 방법을 도저히 모르겠었는데 다른 분의 답안을 보며..
-
[프로그래머스 42577번] 전화번호 목록Coding Test/프로그래머스 2020. 12. 19. 16:59
# 문제 내 풀이 # 내 풀이 - 시간 복잡도 O(N²) def solution(phone_book): for i in range(len(phone_book)): for j in range(i + 1, len(phone_book)): min_len = min(len(phone_book[i]), len(phone_book[j])) if phone_book[j][:min_len] == phone_book[i][:min_len]: return False return True 지향할 답안 # 모범 답안 - 시간 복잡도 O(NlogN) def solution(phoneBook): phoneBook = sorted(phoneBook) for p1, p2 in zip(phoneBook, phoneBook[1:]): ..
-
[프로그래머스 49993번] 스킬트리Coding Test/프로그래머스 2020. 11. 17. 18:53
# 문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. # 제한..
-
[프로그래머스 42586번] 기능개발Coding Test/프로그래머스 2020. 11. 17. 18:48
# 문제 설명 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요. # 제한 사항 · 작업의 개수(progresses, speeds배열의 길이)는 100개 이하입니다. · 작업 진도는 100 미만의 자연수입니다. · 작업 속도는..
-
[프로그래머스 42576번] 완주하지 못한 선수Coding Test/프로그래머스 2020. 11. 17. 18:36
# 문제 설명 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수들의 이름이 담긴 배열 completion이 주어질 때, 완주하지 못한 선수의 이름을 return 하도록 solution 함수를 작성해주세요. # 제한사항 · 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하입니다. · completion의 길이는 participant의 길이보다 1 작습니다. · 참가자의 이름은 1개 이상 20개 이하의 알파벳 소문자로 이루어져 있습니다. · 참가자 중에는 동명이인이 있을 수 있습니다. # 입출력 예 participant completion retur..