파이썬 47

python 코딩테스트 - 프로그래머스 카펫

처음 든 생각 - 이건 수학적으로 접근하는 게 맞다 - 테두리 식과 내부의 타일 개수를 세서 가로 세로를 구하는 다항식을 세워서 연립해야겠다 나의 답 import math def solution(brown, yellow): plus = (brown+4)/2 multi = yellow - 4 + 2 * plus answer = [] for i in range(math.floor(multi**(1/2))+1): if i * (plus - i) == multi: answer.append(i) answer.append(plus-i) answer.sort(reverse=True) return answer brown을 통해서 가로 + 세로의 값을 yellow를 통해서 가로 * 세로의 값을 구한다. 그 다음 두 개의..

python 코딩테스트 - 소수 찾기

처음 든 생각 - 나올 수 있는 모든 수를 구해야겠다 -> permutations 라이브러리 사용 - 소수인지 아닌지 확인하는 함수는 따로 만들어줘야겠다 - string, number 자료형 구분 잘할 것 나의 답 from itertools import permutations import math def solution(numbers): arr =[] for i in range(1,len(numbers)+1): arr.append(list(permutations(numbers,i))) def checkPrime(num): count = 0 if num 1: break return True if count

python 코딩테스트 - 정렬 알고리즘

정렬(Sorting)은 말 그대로 데이터를 특정한 기준에 따라 순서대로 나열하는 것을 의미한다. 오름차순이라면 점점 커지게, 내림차순이라면 점점 작아지게 나열을 하도록 만들면 된다. 정렬 알고리즘은 정말 다양하게 존재한다. 아래의 알고리즘 설명은 모두 오름차순을 기준으로 설명한다. 1. 선택 정렬 (Selection Sort) 데이터 중에서 가장 작은 데이터를 선택해서 맨 앞에 있는 데이터와 바꾸는 것을 반복하는 알고리즘이다. 최솟값을 계속해서 앞으로 가져오는 걸 반복한다고 생각하면 이해가 더 쉽다. 처음에는 전체의 최솟값인 0과 7의 위치를 바꿔준다. 그 다음 맨 앞은 최솟값임을 확정지었으니 나머지 9개의 최솟값을 또 확정지어서 2번째 원소로 가져온다. 그래서 나머지 9개의 원소들 중 최솟값인 1을 5..

python 코딩테스트 - 베스트 앨범

처음 든 생각 - 일단 카테고리 별로 정리한다 - 카테고리별 정리를 하되 각각의 인덱스와 값에 대하여 접근해야 하므로 딕셔너리 자료형을 사용한다. - 총합을 기준으로 카테고리별 정렬을 한 다음 두개씩 append를 해준다. 나의 답 def solution(genres, plays): answer = [] a = {} for i in range(len(plays)): if genres[i] in a: a[genres[i]].append((plays[i],i)) else: a[genres[i]] = [(plays[i], i)] b = list(a.keys()) c = [] for i in a.values(): i.sort(key = lambda x:x[0],reverse=True) for i in a.val..

python 코딩테스트 - 주식가격

처음 든 생각 - 하나를 기준으로 뒤에 있는 모든 값들을 비교해야겠다. - 끝에 있는 애는 사실상 무시가 가능하다고 봐도 무방할 것 같다. 뒤에 가격이 떨어지든 말든 마지막에는 무조건 1초가 증가되기 때문 나의 답 def solution(prices): answer = [] for i in range(len(prices)-1): m = 0 for j in range(i, len(prices)-1): if prices[j] >= prices[i]: m += 1 else: break answer.append(m) answer.append(0) return answer 모든 원소에 대하여 확인을 해야하므로 전체에 대한 반복문을 크게 감싼다. 그 다음 뒤에 있는 원소들을 비교하기 위하여 시작점을 세팅해주고 비교..

python 코딩테스트 - 의상

처음 든 생각 - 카테고리만 확인해서 조합을 짜봐야겠다 - 조합이니깐 combination 라이브러리를 활용해서 모든 조합 구한 다음에 만약 같은 카테고리의 아이템이 있으면 배제하고 카운트를 해야겠다. 나의 답 from itertools import combinations def solution(clothes): answer = 0 l = [] x = [] for i in clothes: l.append(i[1]) for i in range(len(l)): x.append(list(combinations(l,i+1))) for j in x: for k in j: if len(set(list(k))) == len(list(k)): answer+=1 return answer 카테고리만 담을 리스트를 만들어주..

python 코딩테스트 - 타겟 넘버

처음 든 생각 - 모든 경우의 수를 다 돌아야겠네 -> dfs - 하나씩 더해주거나 빼주는 건데 이전의 결과를 받아야되니깐 -> 재귀함수 이런 식의 아이디어를 구현하기로 생각했다. 나의 답 answer = 0 def solution(numbers, target): s = 0 i = 0 def dfs(nums, s, i): global answer if i == len(nums): if s == target: answer += 1 return m = s - nums[i] n = s + nums[i] i += 1 dfs(nums,m,i) dfs(nums,n,i) dfs(numbers,s,i) return answer 먼저 dfs 함수를 만들어 재귀로 동작하도록 구상을 했기 때문에 dfs의 매개변수를 어떻게 ..

python 코딩테스트 - 프로세스

처음 든 생각 - 반복문으로 하나씩 돌되 최댓값이랑도 비교를 해줘야겠네 - 만약 미뤄져야하는 놈이라면 append로 하면 되는데 - 완성된 놈은 어떻게 제거를 하지 -> 실제로도 이 부분에서 가장 고민을 많이했다. 나의 답 def solution(priorities, location): arr = [] for i in range(len(priorities)): for k in range(len(priorities)): if max(priorities) == priorities[k]: arr.append(k) priorities[k] = 0 if len(arr) == len(priorities): break if len(arr) == len(priorities): break return arr.index(..

python 코딩테스트 - 완주하지 못한 선수

처음 든 생각 - 두 개의 리스트를 비교해가면서 있는지 없는지를 확인하면 되겠다. - 동명이인이 있을 수도 있다고 하네 그러면 동명이인의 수도 체크를 해서 진행해야 될까? 나의 답 def solution(participant, completion): participant.sort() completion.sort() for i in range(len(completion)): a = participant.pop() b = completion.pop() if a != b : return a else: continue return participant.pop() 동명이인에 대한 부분을 어떻게 처리해줘야할지 살짝 고민했지만 리스트의 정렬로 해결할 수 있었다. 완주한 선수들의 리스트를 반복문으로 돌면서 하나씩 po..

python 코딩테스트 - DFS, BFS

DFS, BFS는 코딩테스트를 준비해봤다면 꼭 한 번 들어봤을 주제이고 실제로도 매우 자주 등장하는 유형이라고 한다. 그래프 자료구조의 탐색을 알고리즘으로 간단하게 말하면 원하는 데이터를 찾는 과정이다. DFS, BFS를 살펴보기 전에 두 가지 자료구조에 대해서 살펴보아야 한다. 스택 자료구조 먼저 들어온 데이터가 나중에 나가는 형식(선입후출, First in Last out)의 자료구조이다. 쌓기나무나 접시쌓기를 생각하면 된다. 접시를 하나씩 쌓는다고 생각해보자. 그러고 나서 사용할 접시를 집으려고 하면 맨 위에 있는 즉, 가장 마지막에 쌓은 접시를 사용하게 된다. 맨 처음 들어온 접시는 위에 접시가 다 사용되기 전까지는 사용할 수 없다. 스택을 파이썬 코드로 표현하면 다음과 같다. stack = []..

728x90