전체 글

전체 글

    알고리즘 문제 풀이 700문제 기념🎉

    그 동안 풀었던 알고리즘 문제 수가 벌써 700개 넘었다. 지금 세어보니 총 707문제였다. 알고리즘 문제 풀이는 SWEA, 백준, 프로그래머스를 이용해서 풀어왔고, 프로그래머스 같은 경우 반복해서 문제를 연습하고 싶어 계정을 2개로 만들어서 사용했다. 한번 해결했던 문제는 다른 언어로 해결해도 추가로 카운트 되지 않고, 코드업에서 풀었던 문제들은 포함하지 않았기 때문에 실질적으로 해결한 문제 수는 더 많긴 하다. 중간에 쉬었던 기간도 있지만 20년도부터 알고리즘 문제 풀이를 틈틈이 진행해왔고 돌아보니 생각보다 많은 문제를 해결한 거 같아 뿌듯하다. 알고리즘 문제 풀이를 시작한 계기는 원래 기업 채용을 위한 것이었지만, 주어진 문제에 대해 고민하고 해결했던 과정에서 논리적으로 생각하는 힘과 문제해결 능력..

    JSON Server 사용하여 React 프로젝트 만들기 (with Heroku 배포)

    제가 이번에 진행했던 프로젝트에선 json server를 셋팅하고 비동기 데이터 처리를 위한 커스텀 훅을 구현하는 역할을 맡았습니다. 프로젝트를 진행하며 json server을 활용했던 과정을 공유하고자 합니다. 0. JSON Server란? JSON Server은 mock data(json 파일 형태)를 가지고 가짜 API 서버를 만들어 실제로 통신할 수 있도록 백엔드 역할을 대신 해주는 것입니다. 해당 서버는 프론트엔드 개발 환경에서 테스트 용도 등으로 사용하는 것으로 실제 프로덕트에서의 서버 역할을 대신해주지는 못합니다. 아래 공식문서를 참고하세요🤠 npm 공식문서 json-server Get a full fake REST API with zero coding in less than 30 secon..

    [JavaScript] 호이스팅(Hoisting)이란?

    주절주절 오랜만에 블로그 글을 씁니다. 작년 연말에 쓰디 쓴 패배를 맛보고....😇 잠시 휴식기를 가지고, 그 사이 또 새로운 도전을 했습니다. 이제부터는 다시 달릴 시기라고 생각합니다! 예전에는 블로그를 양치기 하려고 했었는데, 점점 블로그 운영을 하다보니 양 보다는 질이지 않나 하는 생각이 듭니다. 새해가 되었으니, 하나의 토픽에 대해 스스로도 더 깊게 공부하고 알게 된 내용을 잘 다듬어 글을 올리려고 마음 먹었습니다. 올해도 화이팅! 최근에는 자바스크립트 책을 읽으며 공부하고 있어 호이스팅에 대해 다시 한번 정리하는 시간을 가졌습니다. 그 전까진 중요한 개념으로 대략적으로만 알고 있었을 뿐 정확하게 알지 못했습니다. 호이스팅(Hoisting) ? 호이스팅은 자바스크립트 코드가 실행되기 전 변수 및 ..

    [백준] 공유기 설치 / 2110번 / 파이썬 / python / 이분탐색

    💡 solutions 💬 이분탐색 이용하여 문제 해결 💬 start, end, mid 변수값들은 공유기 사이 거리로 정한다. 💬 start는 공유기 사이의 최소 거리로, end는 공유기 사이의 최대 거리로 잡고 이분 탐색을 시작한다. 💬 집의 좌표를 담은 house 리스트를 정렬한 후 맨 첫 번째 집부터 공유기를 설치하는데 이때 공유기 사이의 거리를 mid만큼 잡는다. 💬 공유기를 설치한 횟수를 나타내는 count가 주어진 공유기 개수 C 이상이면 공유기 사이의 거리를 넓히고 (이때 공유기 사이 최대 거리를 나타내는 answer값을 mid로 갱신), C 미만이면 거리를 좁힌다. 👨‍💻 code import sys def binary_search(start, end): answer = 0 while sta..

    [프로그래머스] 징검다리 건너기 / 파이썬 / python / 이진탐색

    💡 solutions 💬 순차탐색으로는 효율성을 만족하기 어렵기 때문에 이진탐색으로 다리를 건널 수 있는 최대 인원을 찾아야 한다. 💬 start는 1, end는 max(stones) 디딤돌의 최댓값으로, mid는 (start+end)//2로 설정 💬 디딤돌을 앞에서부터 하나씩 꺼내와 mid값을 빼고 건널 수 있는지 없는지 확인 -> 건널 수 없는 경우 cnt += 1 / 건널 수 있는 경우 cnt = 0으로 초기화 💬 cnt값이 k개 이상이면 디딤돌을 mid명 만큼 건널 수 없기 때문에 반복문 break -> end를 mid-1 로 갱신 💬 반복문이 온전히 종료된 경우, 즉 mid명이 모든 디딤돌을 건널 수 있는 경우 -> start를 mid +1 로 갱신 👨‍💻 code def solution(sto..

    [프로그래머스] 가장 먼 노드 / 파이썬 / python / BFS

    💡 solutions 💬 최단 거리 로직을 위해 BFS 알고리즘으로 구현한다. -> deque 자료구조 사용 💬 visit 배열을 가지고 방문했는지 확인함과 동시에 1부터 해당 노드까지의 거리를 저장한다. 👨‍💻 code from collections import deque def solution(n, edge): adj = [[] for _ in range(n+1)] visit = [0] * (n+1) for a, b in edge: adj[a].append(b) adj[b].append(a) visit[1] = 1 q = deque([1]) while q: x = q.popleft() for next in adj[x]: if not visit[next]: visit[next] = visit[x] + ..

    [프로그래머스] 야근 지수 / 파이썬 / Python / heap

    💡 solutions 💬 야근 피로도를 최소한으로 만들기 위해서는 주어진 N시간 동안 works 리스트 안의 작업량 요소들을 가장 큰 값부터 -1씩 줄여나가는 과정이 필요하다. 💬 works와 n의 크기를 고려했을 때, 효율성을 통과하기 위해서는 값을 비교하는 로직을 위해 heaq 자료 구조를 사용해야 한다. 💬 주어진 예제 중에 3번과 같이 주어진 N시간 동안에 모든 작업량을 모두 끝마칠 수 있는 경우에는 0을 바로 리턴할 수 있도록 조건을 추가해야 한다. 👨‍💻 code import heapq def solution(n, works): answer = 0 if sum(works)

    [프로그래머스] 정수 삼각형 / 파이썬 / python / 다이나믹 프로그래밍

    오늘 파이썬을 정말 오랜만에 쓰는 거라 어색했다. 동빈나님 알고리즘 강의 중 다이나믹 프로그래밍을 공부했고, 이와 관련된 간단한 문제를 풀어보았다. 다이나믹 프로그래밍(Dynamic Programming)이란? 완전 탐색으로 시간이 오래 걸리는 프로그램의 수행 시간을, 메모리를 적절히 사용하여 효율화하는 방법이다. 이미 계산한 결과(작은 문제)를 별도 메모리 영역에 저장하여 다시 계산하지 않도록 하는 것이다. 다음을 만족하는 경우 다이나믹 프로그래밍으로 해결한다. 최적 부분 구조 -> 큰 문제를 작은 문제로 나눌 수 있으며 작은 문제의 답을 모아서 큰 문제를 해결할 수 있다. 중복되는 부분 문제 -> 동일한 작은 문제를 반복적으로 해결해야 한다. 다이나믹 프로그래밍의 두 가지 유형 탑다운(메모이제이션) ..