분류 전체보기 182

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 = []..

python 코딩테스트 - 그리디, 구현

그리디(Greedy Algorithm) 그리디 알고리즘(탐욕법)은 현재 상황에서 지금 당장 좋은 것만 고르는 방법을 의미한다. 그리디 해법은 단순히 가장 좋은 걸 선택하면 그것이 최적의 해인지 그 정당성을 판단하는 것이 매우 중요. 예제) 처음 든 생각 - 큰 놈이 중요한가, 작은 놈이 중요한가 - 일단 정렬을 해야겠다 - 그룹을 많이 만들어야되니깐 일단 작은 놈들부터 최대한 그룹을 짓는 게 유리하겠다 나의 답안 n = list(map(int, input().split())) n.sort() result = 0 count = 0 for i in n: count+=1 if count >=i: result +=1 count = 0 print(result) 공포도가 1이라면 빠르게 1명만 그룹으로 판단하는 것..

javascript 코딩테스트 - 요격 시스템

A 나라가 B 나라를 침공하였습니다. B 나라의 대부분의 전략 자원은 아이기스 군사 기지에 집중되어 있기 때문에 A 나라는 B 나라의 아이기스 군사 기지에 융단폭격을 가했습니다. A 나라의 공격에 대항하여 아이기스 군사 기지에서는 무수히 쏟아지는 폭격 미사일들을 요격하려고 합니다. 이곳에는 백발백중을 자랑하는 요격 시스템이 있지만 운용 비용이 상당하기 때문에 미사일을 최소로 사용해서 모든 폭격 미사일을 요격하려 합니다. A 나라와 B 나라가 싸우고 있는 이 세계는 2 차원 공간으로 이루어져 있습니다. A 나라가 발사한 폭격 미사일은 x 축에 평행한 직선 형태의 모양이며 개구간을 나타내는 정수 쌍 (s, e) 형태로 표현됩니다. B 나라는 특정 x 좌표에서 y 축에 수평이 되도록 미사일을 발사하며, 발사된..

728x90