분류 전체보기 166

[프로그래머스] 정수 삼각형 by 파이썬 (Python) : 동적 계획법 (Dynamic programming)

https://school.programmers.co.kr/learn/courses/30/lessons/43105?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 난이도 LV3 문제 설명 삼각형 모양으로 꼭대기에서 바닥까지 이어지는 경로 중 숫자의 합이 최대가 되는 경우의 합을 Return해준다. 아래칸으로 이동할때 대각선 방향으로 한칸 오른쪽 왼쪽 으로만 이동 가능하다. 접근법 삼각형 꼭대기 한칸 아래에서부터 위에서 내려올 수 있는 경우에 대해 최대 값을 더해준다. 만약 양끝에 있는 경우에는 가능한 값이 하나밖에 없으므로 별..

[동적 계획법] 알고리즘 - 동적 계획법 Dynamic Programming(DP)

동적 계획법(Dynamic Progamming) 하나의 큰 문제를 여러 개의 작은 문제로 나누어 그 결과를 저장하고 다시 큰 문제를 해결할 때 사용하는 알고리즘 설계 기법이다. 각 하위 문제를 먼저 해결하고 저장하기 때문에 같은 하위 문제가 나왔을 경우 저장한 값을 이용하여 간단하게 해결할 수 있다. 이를 통해 계산 횟수를 줄이기 때문에 하위 문제의 수가 기하 급수적으로 증가할 때 유용하다. 사용 용도 최단 경로 문제 행렬의 제곱 문제 최적화 문제 ex) 문제의 숫자 범위가 크고, 경우의 수가 많은 경우 사용 조건 - 아래 두 조건이 만족하는 경우 다이나믹 프로그래밍을 이용하여 문제를 해결하는데 유용하다. 부분 중복(반복) 문제 - 이미 진행했던 연산임에도 불구하고 재귀되며 반복적으로 연산되는 문제 최적..

알고리즘/개념 2023.07.31

[Git] GIt Commit 규칙에 대해 (좋은 git commit 알아보기)

커밋 메시지가 중요한 이유 커밋 메시지는 개발자가 훌룡한 협력자로써 중요한 역할을한다. 다른 사람의 commit 과 pull-request를 검토하는 것이 수월해지고 독립적으로 이루어질 수 있다. 어떤 일이 몇 달 또는 몇 년 전에 발생한 이유에 대해 이해하는 것을 가능하게 한다. 유지관리성 차원에서 프로젝트의 로그는 강력한 도구이다. 커밋 메시지의 7가지 규칙 제목과 본문을 빈 줄로 구분한다. 제목을 50글자 내로 제한한다. 제목 줄은 대문자로 시작해야 한다. 제목 끝에 마침표를 사용하지 않는다. 제목에 명령형으로 사용한다. 본문의 각 행은 72글자 내로 제한한다. 본문을 사용하여 무엇을, 왜, 어떻게 설명해라. 1. 제목과 본문을 빈 줄로 구분한다. 커밋의 첫 번째 빈 줄까지의 텍스트는 커밋 제목으로..

GIT 2023.07.28

[프로그래머스] 2019 KAKAO BLIND RECRUITMENT 길 찾기 게임 by 파이썬 (Python) : 트리 순회

https://school.programmers.co.kr/learn/courses/30/lessons/42892?language=python3 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 난이도 LV3 문제 설명 노드들이 좌표값으로 주어지고 이진트리를 만들어 전위 순회, 후위순회 결과를 Return해야한다. 아래의 규칙들로 트리 노드를 구성한다. 트리를 구성하는 모든 노드의 x, y 좌표 값은 정수이다. 모든 노드는 서로 다른 x값을 가진다. 같은 레벨(level)에 있는 노드는 같은 y 좌표를 가진다. 자식 노드의 y 값은 항상 부모 노드보다 작다...

[트리 순회] 알고리즘 - 트리 순회

트리 순회 트리 구조에서 각각의 노드를 정확히 한 번만 체계적인 방법으로 방문하는 과정을 말한다. 순회의 종류 전위 순회(preorder) : 뿌리(root)를 먼저 방문한다. 중위 순회(inorder) : 왼쪽 하위 트리를 방문 후 뿌리(root)를 방문한다. 후위 순회(postorder) : 하위 트리를 모두 방문 후 뿌리(root)를 방문한다. 레벨(층별) 순서 순회(level-order, 너비 우선 순회) : 위쪽 node부터 아래방향으로 차례로 방문한다. ex) 전위 순회 순서 노드를 방문한다. 왼쪽 서브트리를 전위 순회한다. 오른쪽 서브트리를 전위 순회한다. 방문 순서 A, B, D, G, H, E, C, F, I 중위 순회 순서 왼쪽 서브트리를 중위 순회한다. 노드를 방문한다. 오른쪽 서브트..

알고리즘/개념 2023.07.28

[프로그래머스] 여행 경로 by 파이썬(Python) : DFS

https://school.programmers.co.kr/learn/courses/30/lessons/43164 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 난이도 LV3 문제 설명 [출발지,도착지] 형태로 적힌 항공권 정보 List가 주어진다. 출발지는 항상 ICN 공항에서 출발하며 모든 항공권을 사용해야 한다. 이를 만족하는 경로를 Return하고 만약 만족하는 경로가 2개 이상일 경우 알파벳 순서가 앞서는 경로를 Return한다. 접근법 스택에 ICN을 넣어준다. 출발지와 도착지 정보가 담긴 dictionary 배열의 key(출발지) 와 valu..

[BFS] 알고리즘 - 너비 우선 탐색 (BFS, Breadth First Search)

너비 우선 탐색 (BFS, Breadth First Search) 한 노드에서 시작한 후 시작 노드의 인접한 노드부터 탐색하는 방법이다. 가까운 노드부터 탐색하는 알고리즘 이다. 시작 노드로부터 가까운 정점을 먼저 방문하고 멀리 있는 노드는 마지막에 방문하는 방식이다. 넓게 탐색하는 방식이다. 일반적으로 선입선출 방식인 큐 자료구조를 활용한다. 인접한 노드를 반복적으로 큐에 넣도록 알고리즘을 작성하면 먼저 들어온 것이 먼저 나가게 되어 가까운 노드부터 탐색이 이루어진다. 특징 여러 갈래중 무한한 길이를 가지는 경로가 존재하고 탐색 목표가 다른 경로에 존재하는 경우에는 DFS는 무한루프에 빠져 종료되지 못하지만, BFS는 동시에 탐색이 진행되기때문에 탐색이 완료될 수 있다. 모든길을 한번씩 탐색하기 때문에..

알고리즘/개념 2023.07.27

JPA, ORM이란? 기본 개념 잡기

ORM이란 ? ORM은 객체와 관계형 데이터베이스의 데이터를 자동으로 연결 해주는 도구이다. ORM이 필요한 이유 객체를 관계형 DB에 관리하는 일이 대부분이 되면서 객체와 데이터베이스의 테이블의 불일치를 해결하고 객체를 통해 간접적으로 데이터베이스의 필드를 다루기 위해 필요하다. ORM의 장점 직관적인 코드를 가지고 쿼리가 아닌 메서드로 데이터를 조작할 수 있어 생산성이 높아진다. SQL의 절차적 접근이 아닌 객체 지향적인 접근을 통해 개발할 수 있다. 재사용 및 유지보수 편리성이 증가한다. JPA란 자바 진영에서 ORM기술 표준으로 사용하는 인터페이스 모음이 바로 JPA이다. 특정 기능을 하는 라이브러리가 아닌 ORM을 사용하기 위한 기술을 모아둔 것이다. JPA를 사용해야 되는이유 SQL 중심적인 ..

[프로그래머스] 네트워크 by 파이썬 (Python) : DFS(깊이 우선 탐색)

https://school.programmers.co.kr/learn/courses/30/lessons/43162 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 난이도 LV3 문제 설명 컴퓨터 n 개가 주어지고 연결된 컴퓨터의 정보가 주어진다. 서로 연결된 컴퓨터끼리는 하나의 네트워크로 본다. 총 네트워크의 갯수를 Return 해줘야 한다. 접근법 dictionary에 해당 컴퓨터 (key)에 대해 연결 된 컴퓨터(value)로 저장한다. 모든 컴퓨터를 하나씩 확인하며 방문하지 않았다면 탐색을 위해 DFS를 호출한다. DFS 깊이 우선 탐색을 이용해 시작..

[DFS] 알고리즘 - 깊이 우선 탐색 (DFS)

깊이 우선 탐색 알고리즘 (DFS) 한 루트로 들어가 가장 깊이 들어가서 탐색후 돌아가 다시 다른 루트로 가장 깊이 탐색하는 방식이다. 넓게 탐색하는 것이 아닌 깊이 탐색하는 방식이다. 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘이다. 스택 자료구조를 사용한다. 구현 방법 재귀 호출 스택 배열 동작 과정 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다 2번의 과정을 더 이상 수행할 수 없을 때 까지 반복한다. 사용 용도 순회를 하는 경우에 많이 사용된다. 백트레킹에 사용된다. 자동 미로 생성에 많이 사용된다. 유향 그래프에서 ..

알고리즘/개념 2023.07.26