분류 전체보기

    Clean Architecture in Python

    https://youtu.be/C7MRkqP5NRI?si=NHG-qDp1cweFg7ue 이 글은 위의 영상을 정리하기 위해 필자의 개인적인 생각과 함께 작성된 글입니다.소프트웨어 아키텍처를 설계하고 이를 개발해 나갈 때 아래와 같은 고민을 하게 된다."어떻게 하면 변화에 강하고 확장 가능한 시스템을 만들 수 있을까?"이에 대한 답변으로 영상에서는 Clean Architecture를 위한 "The Golden Rule"을 제시한다. 이는 의존성 역전 원칙(Dependency Inversion Principle, DIP)을 바탕으로 시스템을 내부와 외부로 명확히 구분하여 유연성과 확장성을 극대화해야 한다는 원칙을 담고 있다고 생각한다.Clean Architecture우선, Clean Architecture를..

    [프로그래머스 Lv.3] 경주로 건설 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/67259 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이처음에 문제를 풀 때, 최소 거리가 최소 비용을 보장하지 않을 것으로 판단되어서 DFS로 풀이하였다. 하지만, 일부 테스트 케이스에서 시간 초과가 발생하여 다른 방법으로 풀이해야 했다. (풀이를 검색해 보니 DFS + 메모이제이션 방식으로 풀이할 수 있다고도 한다.)###### DFS 방식으로 풀이, 시간 초과로 인해 실패 ######def solution(board): dirs = [(1, 0, False), (-1, 0,..

    [프로그래머스 Lv.2] 게임 맵 최단거리 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/1844 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이2차원 지도에서 출발지로부터 목적지까지의 최단거리를 알아내는 작업이므로, 전형적인 BFS 문제라고 할 수 있다. 따라서 풀이 자체도 특히 어려운 부분 없이 출발지부터 BFS를 진행하여, 목적지에 도착할 때 몇 칸 움직인 상태인지를 출력하면 되기에 간단한 편이다. 다만, 주의해야 할 점은 목적지에 도달하지 못한 경우에는 -1을 출력해야 한다는 점이다. 처음에 필자는 목적지에 도달하지 못하는 조건을 생각할 때, 단순히 목적지의 왼쪽과 ..

    Github autoSetupRemote 설정

    Github origin에 새로 판 브랜치를 push 하려고 하면, 아래와 같은 에러 메시지와 함께 원하는 대로 push가 안 되는 경우가 있다.fatal: The current branch test-branch has no upstream branch.To push the current branch and set the remote as upstream, use git push --set-upstream origin test-branchTo have this happen automatically for branches without a trackingupstream, see 'push.autoSetupRemote' in 'git help config'.자세하게 에러 메시지를 읽어보면, test-b..

    [프로그래머스 Lv.3] 단어 변환 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43163 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이BFS를 사용한 풀이이다. 풀고 나니 원래 보통 BFS라고 할 때 사용하는 while과 deque를 사용한 구조로 풀이되진 않았으나.. 어찌 됐든 한 단계씩 진행되는 BFS 구조를 사용하여 문제 풀이를 진행했다. 문제에 적힌 대로 주어진 단어의 한 글자씩 변환하며, 변환된 단어가 words 배열에 있는지 체크하고, 또 동시에 이전에 이미 변환을 진행했던 단어가 아닌지 확인하였다. 확인을 통과한 새로운 단어들을 모아 새로운 단계에서..

    [프로그래머스 Lv.2] 괄호 변환 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/60058 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이DFS와 구현이 섞인 문제로 볼 수 있다. 흔히 볼 수 있는 DFS 문제와 다르긴 하나, 재귀를 사용해 한 문장 p의 끝까지 들어가며 특정 로직을 적용하기에 DFS 문제라고 생각한다.구현 부분은 어려운 알고리즘을 사용하는 게 아니다 보니, 문제에 주어진 대로 그저 한 단계씩 구현하면 된다. 한 단계씩 구현해 나가고, 재귀적으로 다시 실행해야 하는 부분은 DFS를 통해 진행하면 비교적 쉽게 풀 수 있다.  처음에는 p의 길이가 10..

    [프로그래머스 Lv.3] 여행경로 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이DFS를 활용한 문제이다. dictionary를 활용하여 전체 티켓들을 사용해 마치 graph와 같은 구조를 완성하고, 이를 DFS로 순회하면 된다. DFS로 순회하며, 더 이상 이동할 수 없는 경우가 되면 그 때 위치하는 공항을 answer 배열에 저장한다.다만 주의해야할 점이 있는데, 가능한 경로가 2개 이상일 땐 알파벳 경로가 앞서는 경우를 반환하라고 했기 때문에 그래프를 완성할 때 정렬이 필요하다는 점을 고려하며 구현해야 ..

    [프로그래머스 Lv.2] 타겟 넘버 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/43165 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이재귀함수를 사용한 DFS를 이용한 풀이이다.재귀함수의 인자로는 숫자들을 사용하여 더하거나 빼기를 진행한 현재까지의 누적값이고, 다른 하나는 현재까지 더하기 또는 빼기에 사용한 숫자의 수이다.초기값은 누적값은 0, 사용한 숫자의 수는 0으로 하였다.종료 조건은 당연하게도 모든 숫자가 사용되었을 때, 즉 numbers 배열의 길이와 사용한 숫자의 수가 같을 때이다.또한, 종료할 때 만약 문제에서의 조건인 누적합이 타겟 넘버와 같은 경..

    Docker 환경에서의 Spring Boot Auto Reload (Hot Reload)

    평소에 인터프리터 언어인 Python과 JavaScript를 사용한 서버 개발을 주로 해왔는데, 최근에 컴파일 언어인 Java를 사용한 서버 개발을 진행할 일이 있었다. 익히 알려져있듯, Spring 앱을 띄우려고 하면 Java는 컴파일 언어이기 때문에 jar 파일을 빌드하는 과정이 따로 필요하다. 이는 주로 인터프리터 언어를 사용해왔던 필자로서는 따로 컴파일 과정을 거쳐야만 서버에 수정 사항을 반영할 수 있다는 부분에서 크게 아쉬움이 느껴졌다. 위와 같은 언어의 근본적인 차이 때문에 아래와 같은 문제가 Docker 환경에서의 개발 진행 시에 아래와 같은 문제가 있었다.인터프리터 언어인 Python 기반의 FastAPI와 JavaScript 기반의 NestJS는 로컬에서의 소스 코드 변경을 Docker ..

    [프로그래머스 Lv.2] 줄 서는 방법 (Python)

    문제 링크: https://school.programmers.co.kr/learn/courses/30/lessons/12936 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이처음에 단순하게 문제를 생각했을 때, itertools의 permutation을 활용하여 순열을 모두 생성해 두고, 여기서 k번째에 해당하는 순열을 찾는 방식으로 해결하려 하였다. 하지만 n의 최댓값인 20의 경우를 생각하여 보면, 20!이라는 어마무시한 숫자이기에 이 방법으로는 해결이 불가능하였다. 그래서 약간은 수학적인 방법을 사용해보았다. n=3일 때의 간단한 예시를 들어보겠다.[1, 2, 3], [1, 3, 2], [2, ..