Coding Test
-
[프로그래머스 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:]): ..
-
[백준 1932번] 정수 삼각형Coding Test/백준 2020. 11. 21. 17:02
# 문제 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 위 그림은 크기가 5인 정수 삼각형의 한 모습이다. 맨 위층 7부터 시작해서 아래에 있는 수 중 하나를 선택하여 아래층으로 내려올 때, 이제까지 선택된 수의 합이 최대가 되는 경로를 구하는 프로그램을 작성하라. 아래층에 있는 수는 현재 층에서 선택된 수의 대각선 왼쪽 또는 대각선 오른쪽에 있는 것 중에서만 선택할 수 있다. 삼각형의 크기는 1 이상 500 이하이다. 삼각형을 이루고 있는 각 수는 모두 정수이며, 범위는 0 이상 9999 이하이다. # 입력 첫째 줄에 삼각형의 크기 n(1 ≤ n ≤ 500)이 주어지고, 둘째 줄부터 n+1번째 줄까지 정수 삼각형이 주어진다. # 출력 첫째 줄에 합이 최대가 되는 경로에 있는 수의 합을 출력한다...
-
[백준 18353번] 병사 배치하기Coding Test/백준 2020. 11. 17. 19:10
# 문제 N명의 병사가 무작위로 나열되어 있다. 각 병사는 특정한 값의 전투력을 보유하고 있으며, 병사를 배치할 때는 전투력이 높은 병사가 앞쪽에 오도록 내림차순으로 배치를 하고자 한다. 다시 말해 앞쪽에 있는 병사의 전투력이 항상 뒤쪽에 있는 병사보다 높아야 한다. 또한 배치 과정에서는 특정한 위치에 있는 병사를 열외시키는 방법을 이용한다. 그러면서도 남아있는 병사의 수가 최대가 되도록 하고 싶다. 예를 들어, N=7일 때 나열된 병사들의 전투력이 다음과 같다고 가정하자. 이 때 3번 병사와 6번 병사를 열외시키면, 다음과 같이 남아있는 병사의 수가 내림차순의 형태가 되며 5명이 된다. 이는 남아있는 병사의 수가 최대가 되도록 하는 방법이다. 병사에 대한 정보가 주어졌을 때, 남아있는 병사의 수가 최대..
-
[프로그래머스 49993번] 스킬트리Coding Test/프로그래머스 2020. 11. 17. 18:53
# 문제 설명 선행 스킬이란 어떤 스킬을 배우기 전에 먼저 배워야 하는 스킬을 뜻합니다. 예를 들어 선행 스킬 순서가 스파크 → 라이트닝 볼트 → 썬더일때, 썬더를 배우려면 먼저 라이트닝 볼트를 배워야 하고, 라이트닝 볼트를 배우려면 먼저 스파크를 배워야 합니다. 위 순서에 없는 다른 스킬(힐링 등)은 순서에 상관없이 배울 수 있습니다. 따라서 스파크 → 힐링 → 라이트닝 볼트 → 썬더와 같은 스킬트리는 가능하지만, 썬더 → 스파크나 라이트닝 볼트 → 스파크 → 힐링 → 썬더와 같은 스킬트리는 불가능합니다. 선행 스킬 순서 skill과 유저들이 만든 스킬트리1를 담은 배열 skill_trees가 매개변수로 주어질 때, 가능한 스킬트리 개수를 return 하는 solution 함수를 작성해주세요. # 제한..