본문 바로가기

Python

(23)
프로그래머스 그래프 가장 먼 노드 python 풀이 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 def solution(n:int, edge:int)->int: graph =[[] for _ in range(n)] distances = [ 0 for _ in range(n) ] is_visited = [False for _ in range(n)] # 시작 노드 방문 queue = [0] is_visited[0] = True # 노드 연결 for (a,b) in edge: graph[a-1].append(b-1)..
프로그래머스 그래프 순위 python 문제풀이 https://programmers.co.kr/learn/courses/30/lessons/49191 코딩테스트 연습 - 순위 | 프로그래머스 5 [[4, 3], [4, 2], [3, 2], [1, 2], [2, 5]] 2 programmers.co.kr from collections import defaultdict def solution(n:int,results:list)->int: # 정확하게 순위를 매길 수 있는 선수들의 수를 구한다. # 한 선수가 다른 선수와 경쟁했을 때, 이기고 진 횟수의 합이 정확하게 n-1번 이라면 이 선수의 순위를 알 수 있다 # 먼저 results의 결과를 통해 결과를 만든다. # 그 후 results의 결과를 통해 유추할 수 있는 결과를 갱신한다 answer=0 wi..
Programmers 코딩 테스트 연습 정렬(Sort) h-index 정답 Python. def solution(citations): answer = 0 citations_sorted = sorted(citations,reverse=True) for i in range(len(citations_sorted)): if citations_sorted[i]>=i+1: answer = i +1 continue else: break return answer # 6 5 3 1 0 이 문제는 왜 정렬을 써야하는가...? 를 빠르게 캐치해내지 못하면 한도 끝도 없이 못풀고, Idea를 이해하면 쉬운 문제이다. h번 인용 이상이 h개, 나머지는 h번 이하... 를 찾는게 중요하고. h는 크기보다 횟수에 초점을 맞추어야 한다는 것을 생각하면 쉽다. 먼저 테스트 케이스를 정렬하면 6 5 3 1 0 이렇게 되는데..
Programmers 코딩 테스트 연습 힙(Heap) 라면공장 정답. import heapq def solution(stock, dates, supplies, k): answer, idx = 0, 0 pq = [] while stock < k: # stock과 보급 전까지 버틸 수 있는 날자는 같다. for current in range(idx, len(dates)): # idx는 소진되지 않은 dates와 stock의 idx를 의미한다. if dates[current]
Programmers 코딩테스트 연습 베스트 앨범 Python 정답. 정렬이 무엇인지 제대로 보여주는 좋은 문제라고 생각한다. 딱히 복잡한 알고리즘이 아닌. 논리적인 사고로 문제를 설명하는 연습을 하게 해준다. 초기화: for문에서는 장르와 재생 횟수 dict {장르: 재생횟수} 장르에 들어갈 곡정보를 튜플로 만들어 {장르 : [튜플 리스트]} 튜플 (곡 id, 재생횟수) 1. 먼저 key value dictionary를 만들어 value로 장르를 정렬한 리스트를 keys를 통해 만든다. (내부 원소들은... 장르 이름 str들) 2. 이 key(장르 이름 str)들 순서대로 장르: 튜플 (곡 id, 재생횟수)를 정렬하여 결과 list에 원소들을 extend 해준다. (곡 id, 재생횟수) (-x[1],x[0])은 먼저 재생횟수 기준으로 내림차순 정렬, 그 이후 곡 id ..
Programmers 코딩테스트 연습 위장 목록 Python 정답. 이 문제는 간단하게 조합!을 찾는 문제이다. defaultdic같은 녀석을 쓰면 더 쉽게 풀 수 있지만, 단순히 key값을 세어 dictionary로 만든 후, 결과값들을 곱하는 식으로 구현하였다. answer에 val+1 해주는 것은 1은 해당 종류 입지 않았을 때. 마지막에 -1 해주는 것은 공집합 제거해 주는 것 시간복잡도는 hashmap을 내부적으로 이용하므로 logn으로 매우매우 효율적 def solution(clothes): dic = {} answer = 1; for i in clothes: if i[1] not in list(dic.keys()): dic[i[1]] = 1 else : dic[i[1]] = 1+ dic[str(i[1])] for val in dic.values(): answ..
Programmers 코딩테스트 연습- 완주하지 못한 선수 python 문제풀이 역시 알고리즘 문제풀이는 파이썬이 답인 것 같다. C++는 내가 추구하고자 하는 방향에 필요 없는 언어인것 같기도 하고... 현재로써 다른 공부할 것들이 많기 때문에... 익숙하면서도 편한, 숏 코딩에 좋은 파이썬을 쓰기로 했다. 예외처리에도 편하고, collection이 너무 사기여서 알고리즘 문제풀이는 무조건 파이썬으로 하는 게 좋은 것 같다...! 일단 이런 비교 문제는. 항상 1. n시간에 끝날 수 있는가? O라면 선형 검색 X라면 Collection을 이용한 정렬 (Quick/Merge를 이용한 nlogn시간) 이 두 가지를 생각하는 게 핵심이다. 즉, 데이터 비교 == 정렬 이라고 생각하는 것이 좋다. 난 어떻게 접근했냐면... 일단 두 데이터를 정렬한다. 그러면 두 데이터의 len이 같다면...