전체 글 474

[Python/프로그래머스]베스트앨범_해시

https://programmers.co.kr/learn/courses/30/lessons/42579 코딩테스트 연습 - 베스트앨범 스트리밍 사이트에서 장르 별로 가장 많이 재생된 노래를 두 개씩 모아 베스트 앨범을 출시하려 합니다. 노래는 고유 번호로 구분하며, 노래를 수록하는 기준은 다음과 같습니다. 속한 노래가 programmers.co.kr 분명히 쉬워보여서 풀수있을 것같은데 못풀었다.. 딕셔너리를 2개 만들어야한 다는 생각을 했으면 쉽게 풀었을 것같다. 딕셔너리를 자유자재로 쓸수있도록 연습해야겠다. 코드 : def solution(genres, plays): answer = [] playdic = {} # {장르 : 총 재생 횟수} dic = {} # {장르 : [재생 횟수, 고유 번호]} fo..

[Python/프로그래머스]위장_해시

https://programmers.co.kr/learn/courses/30/lessons/42578?language=python3 코딩테스트 연습 - 위장 programmers.co.kr 코드[참고 블로그] : def solution(clothes): answer = 1 closet = {} # dictionary for element in clothes : key = element[1] # 옷 종류 value = element[0] # 옷 이름 if key in closet : # 이미 있었던 옷 종류라면 ? closet[key].append(value) else : # 처음 들어온 옷 종류라면 ? closet[key] = [value] # list로 주어야 후에 append할 수 있다. for ke..

[Python/프로그래머스]전화번호 목록_해시

https://programmers.co.kr/learn/courses/30/lessons/42577 코딩테스트 연습 - 전화번호 목록 전화번호부에 적힌 전화번호 중, 한 번호가 다른 번호의 접두어인 경우가 있는지 확인하려 합니다. 전화번호가 다음과 같을 경우, 구조대 전화번호는 영석이의 전화번호의 접두사입니다. 구조 programmers.co.kr 내가 만든 코드 : [효율성 테스트에서 실패] def solution(phone_book): phone_book.sort() while phone_book : tmp = phone_book.pop(0) for i in phone_book : if i.startswith(tmp): return False return True 이 코드를 만들고 돌렸을 때 sta..

[Python/프로그래머스]완주하지 못한 선수 _해시

https://programmers.co.kr/learn/courses/30/lessons/42576 코딩테스트 연습 - 완주하지 못한 선수 수많은 마라톤 선수들이 마라톤에 참여하였습니다. 단 한 명의 선수를 제외하고는 모든 선수가 마라톤을 완주하였습니다. 마라톤에 참여한 선수들의 이름이 담긴 배열 participant와 완주한 선수 programmers.co.kr 백준에도 동일한 문제가 있을것이다. 풀었던 기억이 있다. 근데 이번에는 못풀었다... 코드 : from collections import Counter def solution(participant, completion): answer=Counter(participant) - Counter(completion) return list(answer..

[Python/프로그래머스]입국심사 _이분탐색

https://programmers.co.kr/learn/courses/30/lessons/43238 코딩테스트 연습 - 입국심사 n명이 입국심사를 위해 줄을 서서 기다리고 있습니다. 각 입국심사대에 있는 심사관마다 심사하는데 걸리는 시간은 다릅니다. 처음에 모든 심사대는 비어있습니다. 한 심사대에서는 동시에 한 programmers.co.kr 1. left와 right 값 정의 2. left와 right을 적절히 자르고 최적의 mid값을 찾도록 코드를 만든다. 코드 : def solution(n, times): answer = 0 left, right = 1, max(times) * n # right은 가장 오래걸리는 심사관에게 모두 받을 경우의 시간 while left = n : # 이미 해야할 사람..

[Python/프로그래머스]정수 삼각형 _DP

문제 : https://programmers.co.kr/learn/courses/30/lessons/43105 코딩테스트 연습 - 정수 삼각형 [[7], [3, 8], [8, 1, 0], [2, 7, 4, 4], [4, 5, 2, 6, 5]] 30 programmers.co.kr 코드 : def solution(triangle): answer = 0 for i in range(1, len(triangle)) : for j in range(len(triangle[i])) : if j == 0 : # 왼쪽 끝 원소 triangle[i][j] += triangle[i-1][j] elif j == len(triangle[i])-1 : # 오른쪽 끝의 원소 triangle[i][j] += triangle[i-1]..

[Python/프로그래머스]N으로 표현 _DP

https://programmers.co.kr/learn/courses/30/lessons/42895 코딩테스트 연습 - N으로 표현 programmers.co.kr 코드 : def solution(N, number): answer = -1 dp = [] for i in range(1,9) : # N을 i번 사용 all_case = set() check_number = int(str(N)*i) #N 반복 (i 번 만큼) all_case.add(check_number) for j in range(0,i-1) : # dp에는 i-1만큼이 있음 for op1 in dp[j] : for op2 in dp[-j-1] : all_case.add(op1 - op2) all_case.add(op1 + op2) all_..

[Python/프로그래머스]가장 먼 노드_그래프(BFS)

https://programmers.co.kr/learn/courses/30/lessons/49189 코딩테스트 연습 - 가장 먼 노드 6 [[3, 6], [4, 3], [3, 2], [1, 3], [1, 2], [2, 4], [5, 2]] 3 programmers.co.kr 정말 사람의 기억력은 덧없다. 내가 BFS문제를 몇개를 풀었는데 몇달 안풀었다고 또 잊어버렸다. 어쩔수 없지 계속 푸는 수 밖에 !!!! 1. 그래프 정보 수집 2. 덱을 만들어 시작 노드(1) 을 삽입 3. 덱이 빌 때까지 빼면서 방문하지 않은 노드를 방문하여 vis +1 4. 가장 멀리 떨어진 노드 ( 가장 큰수)를 구해 count를 이용해 개수 return vis[1] = 1을 두고 덱에 1을 삽입해 놓는다. 그리고 1 주변을..

[Python/프로그래머스]H-Index_정렬

https://programmers.co.kr/learn/courses/30/lessons/42747 코딩테스트 연습 - H-Index H-Index는 과학자의 생산성과 영향력을 나타내는 지표입니다. 어느 과학자의 H-Index를 나타내는 값인 h를 구하려고 합니다. 위키백과1에 따르면, H-Index는 다음과 같이 구합니다. 어떤 과학자가 발표 programmers.co.kr 문제를 보고 나혼자 풀수있을 것같았다. 처음 만든 코드 : (하나의 test case에서 틀림) def solution(citations): answer = 0 citations.sort(reverse=True) for i, v in enumerate(citations) : if (i +1)> v : return i return ..

[Python/프로그래머스]가장 큰 수_정렬

https://programmers.co.kr/learn/courses/30/lessons/42746 코딩테스트 연습 - 가장 큰 수 0 또는 양의 정수가 주어졌을 때, 정수를 이어 붙여 만들 수 있는 가장 큰 수를 알아내 주세요. 예를 들어, 주어진 정수가 [6, 10, 2]라면 [6102, 6210, 1062, 1026, 2610, 2106]를 만들 수 있고, 이중 가장 큰 programmers.co.kr 쉬워보였다. 그러나 10과 4중 4를 먼저가도록 만들어야하는데 그 방법을 모르겠다. 그래서 답을 찾아봤다. 신박하게 문자열 *를 이용해 늘려서 비교한다. 큰 문자부터 써야하므로 reverse = True이다. 숫자를 문자로 바꾼 후 그 문자를 ASCII 값으로 치환되어 정렬한다. 숫자들이 str형태..