본문 바로가기

알고리즘 공부 및 문제 풀이

(317)
[pro] 프로그래머스 SQL level2 가격대 별 상품 개수 구하기 - GROUP BY [문제] https://school.programmers.co.kr/learn/courses/30/lessons/131530 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] TRUNCATE(숫자, 버릴 자릿 수) 함수를 이용해서 GROUP BY 해준다. TRUNCATE(1234.5678, 1) -> 1234.5 TRUNCATE(1234.5678, 2) -> 1234.56 TRUNCATE(1234.5678, -1) -> 1230 TRUNCATE(1234.5678, -2) -> 1200 [코드] SELECT TRUNCATE(PRICE, -4) AS P..
[pro] 프로그래머스 SQL level2 가격이 제일 비싼 식품의 정보 출력하기 - MAX [문제] https://school.programmers.co.kr/learn/courses/30/lessons/131115 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] SELECT 문에서 SELECT PRODUCT_ID, PRODUCT_NAME, .., MAX(PRICE) 이런 식으로 하면 PRICE 에 대해서만 그룹함수로 지정되었기에 나머지 컬럼에 대해서도 GROUP BY를 해야 한다. 서브 쿼리를 이용하거나 내림차순 정렬 후 1개만 출력하도록 하는 방법이 있다. [코드] SELECT * FROM FOOD_PRODUCT WHERE PRICE..
[pro] 프로그래머스 SQL level2 재구매가 일어난 상품과 회원 리스트 구하기 - SELECT [문제] https://school.programmers.co.kr/learn/courses/30/lessons/131536 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 같은 유저가 같은 상품을 중복해서 구매한 경우를 구해야 한다. 따라서 USER_ID와 PRODUCT_ID로 GROUP BY 한 후 그 COUNT 가 2 이상인 경우를 출력한다. [코드] SELECT USER_ID, PRODUCT_ID FROM ONLINE_SALE GROUP BY USER_ID, PRODUCT_ID HAVING COUNT(*)>=2 ORDER BY USER_ID..
[pro] 프로그래머스 SQL level2 3월에 태어난 여성 회원 목록 출력하기 - SELECT [문제] https://school.programmers.co.kr/learn/courses/30/lessons/131120 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] SQL 문 다 까먹었다하하하하하 1. 날짜와 관련된 데이터 추출 SELECT * FROM (데이터베이스/테이블) WHERE YEAR(컬럼명) = "2021" 월은 MONTH(컬럼명), 일은 DAYOFMONTH(컬럼명)으로 변경하면 된다. 추가적으 DATEDIFF(A, B)는 A 날짜에서 B 날짜를 뺀 값, CURDATE()는 오늘 날짜를 가리킨다. 2. 날짜 데이터 포맷 변경 ..
[pro] 프로그래머스 level3 43164 여행경로 (c++) - DFS [문제] https://school.programmers.co.kr/learn/courses/30/lessons/43164?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr [풀이] 이전에도 풀었던 문제라 해설은 생략. 사용하지 않은 티켓이고, 현재 위치가 티켓의 출발지점과 일치할 때 DFS를 새로 호출하면 된다. c++은 split() 함수가 없어서 split() 함수를 stringstream을 이용해 구현해서 사용해야 했다. split() 함수는 꽤 유용하기 때문에 기억해두면 좋을 듯. [코드] #include #include #i..
[boj] 백준 gold5 13164 행복 유치원 (Java) - 그리디 [문제] https://www.acmicpc.net/problem/13164 13164번: 행복 유치원 행복 유치원 원장인 태양이는 어느 날 N명의 원생들을 키 순서대로 일렬로 줄 세우고, 총 K개의 조로 나누려고 한다. 각 조에는 원생이 적어도 한 명 있어야 하며, 같은 조에 속한 원생들은 서로 www.acmicpc.net [풀이] 개인적으로 이런 문제가 제일 싫고 제일 어렵다..코드가 복잡하진 않지만 그 로직을 생각해내는게..머리가 핑핑 잘돌아갔으면 좋겠당 이 문제의 핵심은 어떻게 최소 비용의 합을 가지는 k개의 그룹으로 묶을 것인지이다. 이를 위해 먼저 모든 인접한 학생들 간의 차이를 구해서 리스트에 넣어줘야 한다. 예제처럼 1 3 4 6 10 의 학생들이 있다고 하면 1번 학생과 4번 학생의 차이..
[boj] 백준 gold5 11000 강의실 배정 (Java) - 그리디 [문제] https://www.acmicpc.net/problem/11000 11000번: 강의실 배정 첫 번째 줄에 N이 주어진다. (1 ≤ N ≤ 200,000) 이후 N개의 줄에 Si, Ti가 주어진다. (0 ≤ Si < Ti ≤ 109) www.acmicpc.net [풀이] 처음에는 앞서 풀었던 회의실 배정 문제와 같이 한 강의실에 최대한의 인원을 넣고 강의실에 배정받았다는 bool 변수를 둔 후 while문을 돌며 관리하려고 했다. 그런데 N이 커서 시간이 너무 커진다.. 풀이 시나리오는 다음과 같다. 1. 강의 시작 시간 오름차순으로 정렬해준다. 2. 강의 종료 시간을 저장하는 우선순위 큐를 선언한다. 우선순위 큐는 기본 오름차순으로 데이터를 저장한다. 3. 회의실 배정 문제와 같이 현재 강의..
[boj] 백준 silver1 1931 회의실 배정 (Java) - 그리디 [문제] https://www.acmicpc.net/problem/1931 1931번: 회의실 배정 (1,4), (5,7), (8,11), (12,14) 를 이용할 수 있다. www.acmicpc.net [풀이] 이상하게 그리디에 머리가 잘 안돌아간다(다른 건 잘 돌아가는 줄ㅋ)...그래서 오늘은 그리디 데이로.. 최대한 많은 회의실을 배정하려면 어떻게 해야 하는가? 그리디하게 종료시간이 빠른 순서대로 착착 회의실을 배정해주면 된다. 종료시간이 빠른 순서대로 정렬 후, 그 다음 회의의 시작 시간이 현재 회의의 종료 시간과 같거나 더 늦다면 다음 회의실을 배정 받을 수 있다. 여기서 주의할 점은 정렬 시 종료 시간이 같다면 시작 시간이 빠른 순으로 정렬해줘야 한다는 것이다!!! 예를 들어, (시작 시간, ..