프로그래머스
-
프로그래머스 - 디스크 컨트롤러 [C++]문제 풀이/프로그래머스 2023. 7. 26. 23:09
이 문제는 우선순위 큐(힙)를 이용해서 푸는 문제이다. 로직은 어렵지 않게 구현했지만, 계속 오류가 발생했다. input 큐를 돌면서 매번 현재 시간보다 넘어간 job들을 모두 푸시하는 부분이 문제가 없다고 판단하고 다른 곳을 고쳤으나 문제가 해결되지 않았다. 그래서 입력으로 주어진 배열을 정렬하고 제출하니 정답이 나왔다. 사실 내가 생각한 대로라면 입력 배열의 정렬 유무와 상관없이 동작해야 한다. 하지만 tempInput.first b.second; } }; int solution(vector jobs) { int answer = 0; sort(jobs.begin(), jobs.end()); queue input; for (vector job : jobs) { input.push({job[0], job..
-
프로그래머스 - 자동차 대여 기록에서 장기/단기 대여 구분하기 - 151138 [MySQL]문제 풀이/프로그래머스 2023. 7. 18. 23:30
이 문제는 datediff 를 사용하면 쉽게 풀리는 간단한 문제지만, 한 가지 유의할 점이 있다. 예를 들어 6월 1일부터 6월 30일까지의 일수 차이를 구하면 29일이 맞지만, 이 문제에서는 대여 시작 날이 포함되도록 예시를 보여주고 있다. 즉, datediff 를 사용하고 1을 더해야 정답이 나온다. SELECT HISTORY_ID, CAR_ID, DATE_FORMAT(START_DATE, '%Y-%m-%d') AS START_DATE, DATE_FORMAT(END_DATE, '%Y-%m-%d') AS END_DATE, CASE WHEN DATEDIFF(END_DATE, START_DATE) + 1 >= 30 THEN '장기 대여' ELSE '단기 대여' END AS RENT_TYPE FROM CAR..
-
프로그래머스 - 자동차 대여 기록에서 대여중 / 대여 가능 여부 구분하기 [MySQL]문제 풀이/프로그래머스 2023. 6. 23. 15:42
이 문제는 union 과 not in 을 이용해서 푼 문제이다. not in 이나 in 을 사용하려면 where 절에서 컬럼을 지정해야 한다는 것을 꼭 기억하자. (SELECT CAR_ID, '대여중' AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE DATE(START_DATE) = '2022-10-16') UNION (SELECT CAR_ID, '대여 가능' AS AVAILABILITY FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE CAR_ID NOT IN (SELECT CAR_ID FROM CAR_RENTAL_COMPANY_RENTAL_HISTORY WHERE DATE(START_DATE) = '2022-1..
-
프로그래머스 - 식품분류별 가장 비싼 식품의 정보 조회하기 [MySQL]문제 풀이/프로그래머스 2023. 6. 23. 14:48
이 문제는 group by 를 이용하는 문제이다. 이 문제를 처음 풀때는 서브쿼리 없이 MAX 를 이용해서 SQL을 작성했는데, 이렇게 하면 MAX 는 해당 그룹, 즉 카테고리로 묶인 그룹에서 가격의 최댓값만을 알려줄뿐 해당 행까지 지정되지는 않아서 틀린 답으로 나오는 것 같았다. 그래서 카테고리로 묶은 그룹의 최댓값을 출력하는 서브쿼리를 작성하고, in 을 이용해서 해당 값을 포함하는 행을 전부 출력하면 정답이 나왔다. SELECT CATEGORY, PRICE AS MAX_PRICE, PRODUCT_NAME FROM FOOD_PRODUCT WHERE PRICE IN (SELECT MAX(PRICE) AS MAX_PRICE FROM FOOD_PRODUCT WHERE CATEGORY = '과자' OR CA..
-
프로그래머스 - 동명 동물 수 찾기 [MySQL]문제 풀이/프로그래머스 2023. 6. 21. 23:55
이 문제는 group by 를 사용하는 간단한 문제이다. 나는 이 문제를 밑의 방식으로 풀었다. SELECT NAME, CNT FROM (SELECT NAME, COUNT(*) AS CNT FROM ANIMAL_INS WHERE NAME IS NOT NULL GROUP BY NAME) AS TEMP WHERE CNT >= 2 ORDER BY NAME ASC; 그러나 다른 사람들의 풀이에는 having 절이 포함되어 서브쿼리를 사용하지 않았다. 서브쿼리를 사용한 이유는 where 절에서 cnt 를 인식하지 못해서였는데, having 절은 group by 이후의 상태에서 조건을 붙이는 절이라는 사실이 생각났다. 그리하여 다음과 같은 코드로 바꿀 수 있었다. SELECT NAME, COUNT(*) AS CNT..
-
프로그래머스 - 저자 별 카테고리 별 매출액 집계하기 [MySQL]문제 풀이/프로그래머스 2023. 6. 21. 23:16
이 문제는 group by 를 다중 컬럼을 이용해서 푸는 문제이다. 하나 헤맸던 건 SUM(SALES) * PRICE 로 TOTAL_SALES 를 계산해서 계속 틀린 답이 나왔는데, 이는 BOOK_ID 로 GROUP BY 를 한게 아니므로 완료된 그룹 안에서는 다른 BOOK_ID 가 충분히 존재할 수 있다. 그러므로 SUM(SALES * PRICE) 로 TOTAL_SALES 를 계산해야 제대로 된 값이 나온다. SELECT A.AUTHOR_ID, AUTHOR_NAME, CATEGORY, TOTAL_SALES FROM AUTHOR AS A INNER JOIN (SELECT AUTHOR_ID, CATEGORY, SUM(SALES * PRICE) AS TOTAL_SALES FROM BOOK AS B INNER..
-
프로그래머스 - 그룹별 조건에 맞는 식당 목록 출력하기 [MySQL]문제 풀이/프로그래머스 2023. 6. 21. 16:37
이 문제는 join과 where절 서브 쿼리를 이용해서 풀었다. where절 서브 쿼리를 사용할 때 주의할 점은 서브 쿼리가 반드시 컬럼 하나로만 이루어져야 한다는 것이다. 2개 이상의 컬럼을 select 하게 되면 오류가 발생한다. SELECT M.MEMBER_NAME, REVIEW_TEXT, DATE_FORMAT(REVIEW_DATE, '%Y-%m-%d') as REVIEW_DATE FROM MEMBER_PROFILE AS M INNER JOIN REST_REVIEW AS R ON M.MEMBER_ID = R.MEMBER_ID WHERE M.MEMBER_ID = (SELECT MEMBER_ID FROM (SELECT COUNT(MEMBER_ID) AS CNT, MEMBER_ID FROM REST_RE..
-
프로그래머스 - 가장 먼 노드 [C++]문제 풀이/백준 2023. 3. 22. 17:41
이 문제는 bfs를 이용한 문제이다. 최단 경로로 움직였을 때 1번 노드에서 가장 먼 노드의 개수를 구하는 문제로, bfs를 실행한 뒤 visited 배열에서 구하면 되는 간단한 문제이다. #include #include #include #include #include using namespace std; #define MAX 20000 vector edges[MAX + 1]; int visited[MAX + 1]; void bfs(int start) { queue q; visited[start] = 1; q.push(start); while (!q.empty()) { int present = q.front(); q.pop(); for (int i = 0; i < edges[present].size();..