heapq 라이브러리에 대해서 공부하기 전에 우선 heap에 대해 간략히 정리하자면, heap은 최댓값 및 최솟값을 찾아내는 연산을 빠르게 하기 위해 고안된 완전 이진트리를 기반으로 한 자료구조이다. 최소 힙은 가장 부모 노드의 최솟값을 가지고, 자식 노드로 갈수록 값이 커지는 특성이 있다. 힙 자료구조의 장점은 힙 자체로 정렬이 되며 값을 추가, 삭제할 때도 정렬이 유지된다는 장점이 있다. 싸피교육때 힙 자료구조를 배우고 파이썬으로 구현은 해보았지만, heap을 이용하여 다양한 문제를 풀어보지는 못하여 heap을 꼭 알아야 하나?라는 생각에 공부를 미루고 있었는데, 다익스트라와 힙을 활용한 알고리즘 풀이 방식이 플로이드-와샬 알고리즘이 풀어내지 못한 문제를 거뜬히 풀어내는 것을 보고 힙도 공부할 필요가..
TMDB API를 활용한 데이터 기반 영화 추천 사이트 개발 싸피 1학기 과정을 마치면서 1학기 동안 함께 공부했던 팀원들과 팀장 및 Client Server 담당자로 영화 추천 사이트를 개발하게 되었다. 프로젝트를 시작하면서 팀원들과 의견을 취합하는 과정에서 우리가 가장 먼저 했던 일은 우리가 할 수 있는 것과 현실적(경제적)으로 불가능한 일을 구분해 나가는 것이었다. 이 과정을 거치면서 우리의 주 목적인 영화 추천을 어떻게 효과적으로 할 수 있을지 고민해보았다. 그리고, UX를 향상하는 기능을 집중 목표로, 영화 추천 / 게시판을 개발하기 위해 노력했다. 현재 인기있는 OTT사이트들 (OTT사이트는 우리 프로젝트와는 달리 스트리밍 기능까지 있다는 차이점이 있음)을 참고했을 때, 우리 팀이 집중 한 공..
프로그래머스 문제를 풀고 다른 사람들의 풀이를 보다가 collections의 Counter를 사용하여 딕셔너리를 이용해 푸는 문제를 두문 장정도로 깔끔하게 풀어내는 것을 보고 저 라이브러리는 뭘까 하며 알아보았다. 1. collections 1.1 collections collections모듈은 파이썬에서 일반적으로 제공되고 있는 dict, list, set, tuple의 대안을 제공해주는 특별한 데이터 컨테이너들의 집합이다. 큐를 이용하는 구현을 할 때 사용하는 deque 역시 collections 모듈에서 사용할 수 있다. collections 모듈에는 활용도 높아 보이는 container들이 많이 보였는데 오늘은 그중 Counter에 대해 공부해 보았다. 2. Counter 2.1 Counter C..
프로그래머스 문제 중 매칭 점수 (42893)을 풀면서 내가 알고 있는 무기인 split매서드와 strip매서드로 최대한 활용해보았지만 TC 9번을 해결할 수가 없어서 포기하고 다른 사람들의 풀이를 찾아보았다. 파이썬을 이용해서 푼 사람들 대부분이 re라이브러리를 불러와서 정규화라는 것을 활용하는 것을 확인할 수 있었다. TC 9번과 11번의 어려운 예외를 정규화라는 것으로 뚝딱 해결하는 것을 보고, 이건 좀 공부해놓으면 좋겠는데?라는 생각이 들어 공부를 해보았다. 1. 정규표현식(Regular expression)이 무엇일까? 정규 표현식(REs, regexres, regex pattern)이란 파이썬 내부의 re모듈을 통해 사용할 수 있는, 전문화된 프로그래밍 언어이다. 정규표현식은 문자열 집합에 대..
이 문제는 무지와 어피치가 출발점 S에서 택시를 타고 가는데 둘이 각자의 집으로 갈 때 최소 택시요금을 구하는 문제이다. 여기서 둘이 공통된 방향으로 택시를 타고 갈 때는 합승이 가능하다는 추가 조건이 있다. 이 부분까지 읽었을 때 다행이 내 머릿속에 바로 다익스트라가 떠올랐다. 다익스트라 알고리즘이란 그래프 경로 간에 가중치가 있는 경우, 한 꼭짓점에서 다른 꼭짓점 간의 최단 경로를 찾는 알고리즘이다. 나는 이 문제를 보고, 각 목표점(꼭짓점)과 그 사이를 이동할 때 택시요금(가중치)의 최단 택시요금을 구하는 점에서 다익스트라로 충분히 구현 가능하다고 생각했다. 하지만 이 문제를 풀기 위해서 추가로 고민했던 점이 있다. 1. 이 문제는 효율성 테스트도 점수가 있다. 시간/공간 제약을 정확히 명시해주지는..
알고리즘 스터디를 준비하며 풀게 된 문제이다. 물론 어려운 문제였지만 이때까지 완전 검색과 DFS를 풀면서 많이 봤던 유형이었기 때문에 어떻게 풀지 비교적 쉽게 방향을 잡을 수 있었다. 문제를 간략히 설명하자면, 배열이 주어졌을 때, 그 배열을 정사각형으로 나누고, 그 정사각형이 모두 같은 값이면 하나로 압축할 수 있고 이렇게 압축했을 때 배열의 최종적으로 남는 0의 개수와 1의 개수를 출력하는 문제이다. 이 문제에서 제공하는 그림을 본다면, 가장 왼쪽 사각형처럼 초기배열 상태에서는 모든 수가 같지 않기 때문에 2^(1/2) 배수로 정사각형을 나눠야 하고, 그렇게 나누어진 게 두 번째 사각형이다. 두 번째 사각형에서는 1 사분면의 값이 모두 같아지기 때문에 0으로 압축할 수 있다. 이 과정은 정사각형의 ..