분류 전체보기 151

코딩테스트 회고

개요 네이버, 카카오 코딩테스트를 치르고 난 후 KPT 회고를 진행하려고 한다. keep 연습 때 자주 뜨던 index out of range에 대한 연습이 많이 되어 있어 금방 해결했다. 2시간 동안 포기하지 않고 집중을 했다. problem 문제에서 요구하는 바를 정확하게 이해하지 못했다. 풀이 방법에 대해 증명을 하지 않고 바로 구현을 했다. BFS, DFS, DP 등 주요 알고리즘에 집착했다. 디스코드 알람이 떠 당황했다. 파이썬 리스트 복사에 대해 잘 처리하지 못했다. 그냥 listA =listB로 복사 Try 문제에서 요구하는 바가 정확하게 뭔지 생각해 보고 급하게 바로 구현에 들어가지 않는다. 풀이 방법을 생각한 후 예시를 통해 증명하고 엣지 케이스까지 생각해 본 후 구현에 들어간다. 여러 ..

회고 2024.03.24

[백준] A->B 16953번 (python)

출처: https://www.acmicpc.net/problem/16953 16953번: A → B 첫째 줄에 A, B (1 ≤ A B구하는 거 보단 B->A로 구해야겠다고 생각했다. 하지만 예제 정답 부분만 보고 짝수이면 나누기 2 홀수이면 -1 후 나누기 10을 했다. 예시 부분은 다 정답처리가 되었지만 1 25같은 수가 입력된다면 제대로 해결하지 못할 것이다. 그래서 10으로 나누었을 때 나머지가 1인 경우, 2로 나누었을 때 나머지가 1인 경우 다른 경우는 실패 이렇게 3가지 경우로 나누게 되었다. A, ..

Algorithm 2024.03.22

동아리 개발환경 구축 (spring boot, mysql 도커로 배포하기)

개요 개발 동아리에서 개발부장으로 스터디를 관리하게 되었다. 혼자 공부하는 것과 동아리에서 활동하는 것의 가장 큰 차이점은 협업이라고 생각했다. 그래서 프론트엔드와 백엔드의 협업 방법을 생각을 해봤다. 1. 클라우드 서버에 배포 후 백엔드 API이용 2. 프론트엔드 로컬 PC에 백엔드 서버 배포 후 API이용 1번은 돈이 든다는 문제점과 여러 가지 프로젝트진행 시 동아리 원들이 팀을 나눠 스터디를 동시에 진행하게 된다면 한 개의 EC2에 모든 프로젝트를 배포하게 된다면 포트 설정을 따로 해주어야 한다는 번거로움이 있어 2번을 선택하게 되었다. 2번을 선택한 후 프론트엔드 측에서 데이터베이스를 설치하고, 자바를 설치하고 spring boot 서버를 띄우는 것은 불필요한 작업이라고 생각이 되어 도커 컨테이너..

카테고리 없음 2024.03.20

[프로그래머스] 리코쳇 로봇 (python)

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/169199 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 기존 bfs 문제와 다른 점은 board를 벗어나거나 벽에 부딪힐 때까지 한 방향으로 쭉 이동하는 것을 한 번 이동했다고 카운트하는 점이다. 하지만 기존의 bfs를 조금 변형해서 풀 수 있었다. 현재 위치에서 move 함수를 이용해서 다음 위치점을 찾아야 했다. move 함수의 인자로 현재 위치, 이동 방향을 나타내는 인덱스 i를 넘겨주었다. 그 후 while 루프를 통해 벽..

Algorithm 2024.03.20

[프로그래머스] 석유 시추 (python)

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 처음엔 문제를 x축으로 나누어서 진행했다. 같은 x축일 때 까진 visited 배열을 초기화하지 않고 진행했고 x축이 증가할 때마다 visited 방문 배열을 초기화해주었다. 이렇게 하니 효율성 문제가 발생했다. 그래서 다른 분들의 풀이 방법을 참고하니 정사영이라는 알고리즘을 사용하는 것을 볼 수 있었다. 먼저 x축에 따른 추출 가능한 석유량을 count하는 배열 result..

Algorithm 2024.03.19

[프로그래머스] 붕대 감기 (python)

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/250137 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 단순 구현문제이다 현재 시간에서 다음 공격 시간으로 바로 이동했다. 그런 후 공격 데이미를 입기 전에 얻는 회복량을 계산하고 데이미를 주었다. 그런 다음 현재 시간을 최근에 받은 공격 시간으로 이동했다. def solution(bandage, health, attacks): max_health = health health_time = 0 now_t = 0 last_time =..

Algorithm 2024.03.13

[프로그래머스] 코딩 테스트 공부 (python)

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/118668# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 처음에는 그리디 하게 풀 수 있는 방법이 있나 생각해 봤는데 복잡할 거 같아서 dp로 풀어야겠다고 생각했다. dp로 풀기 위해 중복되는 계산이 뭔지 생각해 봐야 한다. 이차원 배열로 dp[알고력][코딩력] = cost 알고력과 코딩력을 가지는데 필요한 최소 시간으로 설정했다. dp배열을 모든 문제를 푸는데 필요한 최대 알고력과 코딩력의 크기로 int max값으로 초기화했다...

Algorithm 2024.02.03

JPA MultipleBagFetchException에러 해결하기

개요 동아리 프로젝트에서 Stylist의 정보를 모든 조회하기 위해 Fetch조인을 사용하는 과정에서 JPA의 N + 1문제를 해결하기 위해 Left Join Fetch을 사용하여 해결하려고 했지만 MultipleBagFetchException이 발생했다. 이유를 알아보자 상황 일단 Stylist의 관계를 알아보자 Stylist는 0~3개의 Career를 가질 수 있다. Stylist는 0~3개의 Style을 등록할 수 있다. Stylist는 0~5개의 StylistService를 등록할 수 있다. StylistService는 0~2개의 ServiceCategory를 등록할 수 있다. 즉 Stylist에 OneToMany로 연결되어있다. public class Stylist implements UserD..

JPA 2024.01.20

JPQL(Java Persistence Query Language)

jpa는 다양한 쿼리 방법을 지원한다 1. jpql 2. jpa criteria 3. queryDSL 4. 네이티브 SQL 5. JDBC API 직접 사용, MyBatis, SpringJdbcTemplate함께 사용 jpql = 동적 쿼리 힘들다. 실무에서 문자열 +힘들다 criteria = sql 스럽지 않다, 유지보수 어렵다. JPQL JPQL은 객체지향 쿼리 언어다. 따라서 테이블을 대상으로 쿼리를 작성하는 것이 아니라 엔티티 객체를 대상으로 쿼리를 작성한다. JPQL은 SQL을 추상화해서 특정데이터베이스 SQL에 의존하지 않는다. JPQL은 결국 SQL로 변환된다.(매핑 정보와 방언을 조합해서) JPQL 문법 엔티티와 속성은 대소문자 구분한다.(Member) JPQL 키워드는 대소문자 구분을 하지..

JPA 2024.01.03

[프로그래머스] 두 큐 합 같게 만들기 (python)

출처 : https://school.programmers.co.kr/learn/courses/30/lessons/118667 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 처음에는 두 큐의 합이 같게 만드는 알고리즘이 있을까 생각해 봤는데 떠오르지 않았다. 그래서 그냥 완전 탐색으로 합이 작은 쪽에서 큰 쪽으로 원소를 이동해 가며 특정 횟수가 넘으면 return -1 하게 풀어야겠다고 생각했다. 처음에는 sum 메서드를 활용해서 매번 loop마다 합을 구해서 비교했는데 이러면 sum 메서드 때문에 시간 초과 된다. 그래서 변수 total1, t..

Algorithm 2024.01.03