전체 글 74

QueryDSL 에서 Order By 다음 Group By

캡스톤 진행 중 QueryDSL을 사용하여 쿼리문을 날려 원하는 정보를 얻어야 할 일이 생겼다. 장소와 게시물은 일대다 관계이고 장소 1개당 최근 게시물 1개 (pk가 가장 큰 것)를 조회하고 싶었다. SQL문을 날리면 MAX(ID) 값으로 조회할 수 있겠지만, QueryDSL로 entity를 조회해야했기 때문에 어떻게 해야할지 많이 고민했다. 그러다 생각했던 방법이 Order By 다음 Group By 인데, 일반적인 SQL문은 Group By 다음 Order By가 수행되기 때문에 다른 방법을 사용해야 했다. 그래서 생각한 방법은 서브쿼리를 사용하는 방법이었다! return queryFactory .selectFrom(post) .where(post.id.in( JPAExpressions .selec..

BOJ | 11501 - 주식 (python)

📈 백준 11501번 주식 python ✏️ 문제 홍준이는 요즘 주식에 빠져있다. 그는 미래를 내다보는 눈이 뛰어나, 날 별로 주가를 예상하고 언제나 그게 맞아떨어진다. 매일 그는 아래 세 가지 중 한 행동을 한다. 주식 하나를 산다. 원하는 만큼 가지고 있는 주식을 판다. 아무것도 안한다. 홍준이는 미래를 예상하는 뛰어난 안목을 가졌지만, 어떻게 해야 자신이 최대 이익을 얻을 수 있는지 모른다. 따라서 당신에게 날 별로 주식의 가격을 알려주었을 때, 최대 이익이 얼마나 되는지 계산을 해달라고 부탁했다. 예를 들어 날 수가 3일이고 날 별로 주가가 10, 7, 6일 때, 주가가 계속 감소하므로 최대 이익은 0이 된다. 그러나 만약 날 별로 주가가 3, 5, 9일 때는 처음 두 날에 주식을 하나씩 사고, ..

알고리즘/백준 2022.10.23

BOJ | 1105 - 팔 (python)

💪 백준 1105번 팔 파이썬 ✏️ 문제 L과 R이 주어진다. 이때, L보다 크거나 같고, R보다 작거나 같은 자연수 중에 8이 가장 적게 들어있는 수에 들어있는 8의 개수를 구하는 프로그램을 작성하시오. 💡 해결방법 숫자의 자릿수가 다른 것은 8이 꼭 들어갈 확률이 없으므로 (89, 800 과 같이 자릿수가 다른 것) 고려하지 않았다. -> 숫자의 자릿수가 같은 것만 고려했다! (100, 200 / 80, 88 과 같은 수) 가장 큰 자릿수부터 비교하면서 R과 L 모두 8이면 무조건 8이 들어갈 수 밖에 없다. 하지만 중간에 자릿수가 차이나는 수가 들어오게 된다면 그 이후부터는 8이 꼭 들어오지 않아도 되기 그 뒤는 더 이상 비교하지 않아도 된다. 반례로 88008 88018 을 비교한다고 생각하자. ..

알고리즘/백준 2022.10.22

BOJ | 2583 - 영역 구하기 (python)

🚧 백준 2583번 영역 구하기 파이썬 ✏️ 문제 눈금의 간격이 1인 M×N(M,N≤100)크기의 모눈종이가 있다. 이 모눈종이 위에 눈금에 맞추어 K개의 직사각형을 그릴 때, 이들 K개의 직사각형의 내부를 제외한 나머지 부분이 몇 개의 분리된 영역으로 나누어진다. 예를 들어 M=5, N=7 인 모눈종이 위에 과 같이 직사각형 3개를 그렸다면, 그 나머지 영역은 와 같이 3개의 분리된 영역으로 나누어지게 된다. 와 같이 분리된 세 영역의 넓이는 각각 1, 7, 13이 된다. M, N과 K 그리고 K개의 직사각형의 좌표가 주어질 때, K개의 직사각형 내부를 제외한 나머지 부분이 몇 개의 분리된 영역으로 나누어지는지, 그리고 분리된 각 영역의 넓이가 얼마인지를 구하여 이를 출력하는 프로그램을 작성하시오. 입..

알고리즘/백준 2022.03.08

Programmers | Level 2 - 기능 개발 (python)

⚙️ 프로그래머스 Level 2 - 기능 개발 파이썬 ✏️ 문제 https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 programmers.co.kr 입출력 예 💡 해결방법 deque를 이용했다. 1. progresses[0]이 100보다 작을 경우 - progresses[0]이 100보다 커질때까지 계속해서 progresses의 원소에 speeds를 각각 더했다. 2. progresses[0]이 100보다 같거나 클 경우 - progre..

Spring Boot | Lombok - @RequiredArgsConstructor 어노테이션

@RequiredArgsConstructor 어노테이션 @RequiredArgsConstructor은 Lombok에서 쓸 수 있는 어노테이션이다. 필수적으로 들어가는 것을 이용해 생성자를 자동으로 만든다. @RequiredArgsConstructor를 사용하지 않은 순수 자바 코드의 경우 다음과 같이 표현할 수 있다. public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository,..

BOJ | 15686 - 치킨 배달 (python)

🍗 백준 15686 치킨배달 파이썬 ✏️ 문제 크기가 N×N인 도시가 있다. 도시는 1×1크기의 칸으로 나누어져 있다. 도시의 각 칸은 빈 칸, 치킨집, 집 중 하나이다. 도시의 칸은 (r, c)와 같은 형태로 나타내고, r행 c열 또는 위에서부터 r번째 칸, 왼쪽에서부터 c번째 칸을 의미한다. r과 c는 1부터 시작한다. 이 도시에 사는 사람들은 치킨을 매우 좋아한다. 따라서, 사람들은 "치킨 거리"라는 말을 주로 사용한다. 치킨 거리는 집과 가장 가까운 치킨집 사이의 거리이다. 즉, 치킨 거리는 집을 기준으로 정해지며, 각각의 집은 치킨 거리를 가지고 있다. 도시의 치킨 거리는 모든 집의 치킨 거리의 합이다. 임의의 두 칸 (r1, c1)과 (r2, c2) 사이의 거리는 |r1-r2| + |c1-c2..

알고리즘/백준 2022.03.07

Programmers | Level 2 - 오픈 채팅방 (python)

💬 프로그래머스 Level 2 - 오픈 채팅방 ✏️ 문제 https://programmers.co.kr/learn/courses/30/lessons/42888 코딩테스트 연습 - 오픈채팅방 오픈채팅방 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가상의 닉네임을 사용하여 채팅방에 들어갈 수 있다. 신입사원인 김크루는 카카오톡 오 programmers.co.kr 입출력 예 💡 해결방법 유저의 아이디와 유저의 닉네임 / 유저의 상태를 따로 구분해야 한다. 유저의 아이디와 유저의 닉네임은 딕셔너리를 이용했다. 만약 상태가 Enter나 Change일 경우 key 값을 유저의 아이디, value값을 유저의 닉네임으로 두어 만약 change할 경우에도 최종적으로 정해지는 ..

Programmers | Level 1 - 신규 아이디 추천 (python)

🆔 프로그래머스 Level 1 - 신규 아이디 추천 2021 KAKAO BLIND RECRUITMENT ✏️ 문제 https://programmers.co.kr/learn/courses/30/lessons/72410 코딩테스트 연습 - 신규 아이디 추천 카카오에 입사한 신입 개발자 네오는 "카카오계정개발팀"에 배치되어, 카카오 서비스에 가입하는 유저들의 아이디를 생성하는 업무를 담당하게 되었습니다. "네오"에게 주어진 첫 업무는 새로 programmers.co.kr 입출력 예 💡 해결방법 1단계 - lower함수를 사용해서 모두 소문자로 변경한다. 2단계 - 알파벳, 숫자, -, _, . 이 아니라면 replace를 사용해서 문자를 삭제(공백)한다. 3단계 - replace를 사용하여 .(점) 하나로 모..

BOJ | 2638 - 치즈 (python)

🧀 백준 2638번 치즈 ✏️ 문제 N×M의 모눈종이 위에 아주 얇은 치즈가 과 같이 표시되어 있다. 단, N 은 세로 격자의 수이고, M 은 가로 격자의 수이다. 이 치즈는 냉동 보관을 해야만 하는데 실내온도에 내어놓으면 공기와 접촉하여 천천히 녹는다. 그런데 이러한 모눈종이 모양의 치즈에서 각 치즈 격자(작 은 정사각형 모양)의 4변 중에서 적어도 2변 이상이 실내온도의 공기와 접촉한 것은 정확히 한시간만에 녹아 없어져 버린다. 따라서 아래 모양과 같은 치즈(회색으로 표시된 부분)라면 C로 표시된 모든 치즈 격자는 한 시간 후에 사라진다. 와 같이 치즈 내부에 있는 공간은 치즈 외부 공기와 접촉하지 않는 것으로 가정한다. 그러므 로 이 공간에 접촉한 치즈 격자는 녹지 않고 C로 표시된 치즈 격자만 사..

알고리즘/백준 2022.02.24