목록알고리즘 (26)
매일 매일 미라클 코딩
[접근] 처음엔 최소힙과 최대힙을 두 개 만들어서 각각 연산했는데, 그럴필요가 없었다. heapq 라이브러리에 최댓값을 조회하는 메소드가 있다. heapq.nlargest( n , list ) # list 중에서 가장 큰 값 n 개 조회 반대로 가장 작은 값 n 개 조회는 heapq.smallest(n,list) 이다 => 따라서 힙 길이만큼을 조회하면 전체 인자가 내림차순으로 정렬된다. => 인덱스 1부터 슬라이싱 하면 최댓값이 제외된 나머지 리스트가 되고 이를 다시 heapify 한다. import heapq def solution(operations): answer = [] hq = [] heapq.heapify(hq) for oper in operations: op = oper.split() if..
https://programmers.co.kr/learn/courses/30/lessons/49994 코딩테스트 연습 - 방문 길이 programmers.co.kr [접근] 좌표 개수만큼 2차원 배열을 생성한다 반복문으로 명령어를 확인하고 그에 따라 좌표를 움직인다 visited 집합에 경로가 없으면 경로를 저장한다. (x, y, nx ,ny ) → 이 때 도착 좌표에서 출발 좌표로 향하는 경로도 같은 경로이므로 거꾸로 온적이 없는지 확인한다. # if (x,y,nx,ny) not in visited and (nx,ny,x,y) not in visited: 해당사항이 없으면 answer +=1 로 처음지나온 경로 값을 늘려준다 def solution(dirs): visited=set() game_map ..
https://programmers.co.kr/learn/courses/30/lessons/1844 코딩테스트 연습 - 게임 맵 최단거리 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,1],[0,0,0,0,1]] 11 [[1,0,1,1,1],[1,0,1,0,1],[1,0,1,1,1],[1,1,1,0,0],[0,0,0,0,1]] -1 programmers.co.kr BFS 단골 문제인 미로 최단 경로 찾기 유형 이코테 연습문제와 백준에서 풀어봤기에 무리 없이 풀었다. 조심할 것은 deque 자료구조를 초기화할 때, iterable한 형태로 담아줘야한다는 것 (배열이라든지) ex) q = deque(0) # TypeError 발생 q= deque([0]) # 성공 [접근]..
수학의 정석 앞부분에서 많이 했던 행렬의 곱.. 구현하려니 어려웠다. 3 중 포문 돌리다가 머리가너무 아파서 다른 풀이를 찾아 보았다. zip(* ) 연산을 통해 행렬을 바꿔줄 수 있다고 한다. arr2의 행들을 열로 바꾸어, arr2의 행과 arr1의 행 길이를 맞춰 연산할 수 있다. def solution(arr1, arr2): answer = [[sum(a*b for a,b in zip(a_row,b_col)) for b_col in zip(*arr2)] for a_row in arr1] return answer