본문 바로가기

알고리즘/프로그래머스

(29)
[프로그래머스 코딩테스트 고득점 Kit / 정렬] K번째수 (python) 풀이 def solution(array, commands): answer = [] for command in commands: i, j, k = command answer.append(sorted(array[i-1:j])[k-1]) return answer commands 2차원 배열을 반복문을 돌면서 한 배열씩 꺼내서 i, j, k 변수에 저장하고, array를 i부터 j번째 수까지 slice한 다음 sorted로 오름차순 정렬해준 뒤, k번째 수를 answer에 저장한다.
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 모음사전 (python) 풀이 def solution(word): vowel = "AEIOU" global answer global flag answer = 0 flag = True def perm(arr, n): global answer global flag if n > 0: curWord = "".join(arr) if word == curWord: flag = False return if n == 5: return for i in range(len(vowel)): if flag: answer += 1 arr.append(vowel[i]) perm(arr, n+1) arr.pop() else: return perm([], 0) return answer 내 풀이 재귀함수로 문제해결 flag 변수를 만들어서 답이 나오면 들어와있..
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 피로도 (python) 풀이 def solution(k, dungeons): global answer answer = -1 used = [0 for _ in range(len(dungeons))] # 가능한 던전 찾는 함수 def perm_dungeon(n, left_k): global answer if n == len(dungeons): answer = n return for index in range(len(dungeons)): if not used[index]: if left_k >= dungeons[index][0]: left_k -= dungeons[index][1] used[index] = 1 perm_dungeon(n+1, left_k) else: if answer < n: answer = n continue us..
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 소수찾기 (python) 풀이 1 : 파이썬 재귀함수로 순열 직접 구현 import math def solution(numbers): used = [0 for _ in range(len(numbers))] answer = set() def prime_perm(arr, n): if n > 0: num = int(''.join(arr)) isPrime = True for i in range(2, math.trunc(math.sqrt(num)) + 1): # 소수인지 확인 if num % i == 0: isPrime = False break if num != 0 and num != 1 and isPrime: answer.add(num) if n == len(numbers): return for index in range(len(num..
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 카펫 (python) 풀이 import math def solution(brown, yellow): answer = [] length = 0 for i in range(1, math.trunc(math.sqrt(yellow)) + 1): for y in range(1, i + 1): if y * (brown/2 - 2 - y) == yellow: length = y break answer.append(brown / 2 - length) answer.append(length + 2) return answer 내 풀이 answer에 들어갈 가로, 세로 길이는 각각 yellow 가로 + 2, yellow 세로 + 2이다. 따라서 yellow의 가로, 세로 길이를 알면 답을 구할 수 있다. yellow 가로 = x, yellow 세..
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 모의고사 (python) 풀이 def solution(answers): answer = [] s1 = [1, 2, 3, 4, 5] s2 = [2, 1, 2, 3, 2, 4, 2, 5] s3 = [3, 3, 1, 1, 2, 2, 4, 4, 5, 5] d = dict.fromkeys([1, 2, 3], 0) for i in range(len(answers)): if answers[i] == s1[i % len(s1)]: d[1] += 1 if answers[i] == s2[i % len(s2)]: d[2] += 1 if answers[i] == s3[i % len(s3)]: d[3] += 1 sorted_list = sorted(d.items(), key = lambda x: (-x[1], x[0])) for i in sorted_..
[프로그래머스 코딩테스트 고득점 Kit / 완전탐색] 최소직사각형 (python) 풀이 def solution(sizes): answer = 0 max1 = max(map(max, sizes)) max2 = max(map(min, sizes)) answer = max1 * max2 return answer 내 풀이 가로 세로를 통틀어 가장 긴 길이(max1)를 구하고, 각 직사각형 안에서 가로 세로 중 작은 것들 중에서 가장 큰 길이(max2)를 구한 뒤 곱해서 답을 구했다. 예를 들어 sizes가 [[60, 50], [30, 70], [60, 30], [80, 40]]로 주어진 경우, 가장 긴 길이는 80이다. (max1 = 80) 이렇게 구한 길이가 명함 지갑의 한 변이 된다. 가로 세로를 통틀어 가장 긴 길이(max1)를 구하고, 각 직사각형 안에서 가로 세로 중 작은 것들 중에..
[프로그래머스 코딩테스트 고득점 Kit / 해시] 베스트 앨범 (python) 풀이 def solution(genres, plays): answer = [] d = {} #{"장르": {고유번호 : 횟수}, {고유번호 : 횟수} ...} genre_cnt = {} #{"장르" : "전체 횟수"} for i in range(len(plays)): # 중첩 딕셔너리 선언 d[genres[i]] = {} for i in range(len(genres)): d[genres[i]][i] = plays[i] if genres[i] in genre_cnt: genre_cnt[genres[i]] += plays[i] else: genre_cnt[genres[i]] = plays[i] sorted_genre = sorted(genre_cnt.items(), key=lambda x: x[1], re..

반응형