목록분류 전체보기 (180)
YataNox
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/A0dv3/btsHStUq7pn/OOZX3UcLzyPbz90moY8rKK/img.png)
문제 처음 봤을 땐 이게 레벨 4? 라는 생각이 바로 들었다.NAME이 Milk인 경우와 Yogurt인 경우를 구해서 INTERSECT를 통해서 교집합인 CART_ID를 뽑아냈다.이후 다른 사람이 푼 것을 봤는데 이 방식도 재밌었다.NAME이 milk, Yogurt인 것들만 도출해서 cart_id를 기반으로 그룹화하고 중복제거한 NAME의 갯수가 2개인 것을 뽑아냈다. 이 방식도 흥미로워 둘 다 올려본다.코드SELECT CART_ID FROM CART_PRODUCTS WHERE NAME = 'Milk' INTERSECT SELECT CART_ID FROM CART_PRODUCTS WHERE NAME = 'Yogurt' ORDER BY 1 ASC; OR SELECT CART_ID FROM CART_PRO..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bNpDp2/btsHS1b35Q3/UnpsoRrLiLq21BMnBxUUk1/img.png)
문제 조인 두 번만 하면 되는 문제이다.우선 APPOINTMENT 테이블에서 2022년 4월 13일 진료기록 중 예약이 취소되지 않은 CS(흉부외과) 데이터만 도출했다.이후 해당 테이블에 PATIENT, DOCTOR 테이블을 각각의 ID를 기준으로 조인해주고 출력했다. 코드WITH NOT_CANCEL_CS_AT413 AS ( SELECT * FROM APPOINTMENT WHERE (APNT_CNCL_YN = 'N' AND DATE_FORMAT(APNT_YMD, '%Y-%m-%d') = DATE_FORMAT('20220413', '%Y-%m-%d')) AND MCDP_CD = 'CS' ) SELECT DISTINCT cna.APNT_NO, p...
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/dClOY8/btsHSBEEkOj/QZMCPMdPvcrQ5cACp8N9q0/img.png)
문제 DEPT 테이블은 굳이 쓸 필요가 없었다.HR_GRADE의 EMP_NO을 기준으로 그룹화하고 SCORE의 평균을 이용해 CASE문으로 등급과 보너스 비율을 계산한다.이후 해당 테이블과 EMP 테이블을 조인하여 급여의 보너스 비율을 계산한다. 코드 WITH SCORE AS ( SELECT EMP_NO, CASE WHEN AVG(SCORE) >= 96 THEN 'S' WHEN AVG(SCORE) >= 90 THEN 'A' WHEN AVG(SCORE) >= 80 THEN 'B' ELSE 'C' END AS 'GRADE', CASE WHEN AVG(SCORE) >= 96 THEN 20 WHEN..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/G8aUr/btsHSbfc4oq/bp6V61NxIuQvwQvb8x1eOK/img.png)
문제 우선 NULL일 길이를 다 10CM로 변경한 테이블을 생성하고 해당 테이블을 FISH_TYPE별로 그룹화하면서 AVG(LENGTH)가 33 이상인 값들만 살렸다. 코드 WITH FISH_INFO_NEW AS ( SELECT ID, FISH_TYPE, IFNULL(LENGTH, 10) AS 'LENGTH', TIME FROM FISH_INFO ) SELECT COUNT(*) AS 'FISH_COUNT', MAX(LENGTH) AS 'MAX_LENGTH', FISH_TYPE FROM FISH_INFO_NEW GROUP BY FISH_TYPE HAVING AVG(LENGTH) >= 33 ORDER BY 3 ASC;
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/c4EtQi/btsHR2Jsggb/UE6RutKBRhSqCg35mDeNM0/img.png)
문제 조인으로 처리를 해도 되지만 WITH로 작성한 글이 3개 이상인 WRITER_ID를 도출하고 USER_ID가 도출한 WRITER_ID와 동일한 유저의 정보만 출력하도록 기본 구조를 잡았다. 유저의 CITY, STREET_ADDRESS1,2를 합쳐서 출력하는 것은 CONCAT 메소드를 이용했으며,전화번호 같은 경우는 CONCAT과 동시에 SUBSTRING을 통해 중간 중간에 하이픈(-)을 삽입했다. 코드WITH BOARD AS ( SELECT DISTINCT WRITER_ID FROM USED_GOODS_BOARD GROUP BY WRITER_ID HAVING count(*) > 2 ) SELECT ugu.USER_ID, ugu.NICKNAME, CONCAT(ugu.CI..
문제문제 설명1 x 1 크기의 칸들로 이루어진 직사각형 격자 형태의 미로에서 탈출하려고 합니다.각 칸은 통로 또는 벽으로 구성되어 있으며, 벽으로 된 칸은 지나갈 수 없고 통로로 된 칸으로만 이동할 수 있습니다.통로들 중 한 칸에는 미로를 빠져나가는 문이 있는데, 이 문은 레버를 당겨서만 열 수 있습니다. 레버 또한 통로들 중 한 칸에 있습니다. 따라서, 출발 지점에서 먼저 레버가 있는 칸으로 이동하여 레버를 당긴 후미로를 빠져나가는 문이 있는 칸으로 이동하면 됩니다. 이때 아직 레버를 당기지 않았더라도 출구가 있는 칸을 지나갈 수 있습니다.미로에서 한 칸을 이동하는데 1초가 걸린다고 할 때, 최대한 빠르게 미로를 빠져나가는데 걸리는 시간을 구하려 합니다.미로를 나타낸 문자열 배열 maps가 매개변수로 ..
문제문제 설명틱택토는 두 사람이 하는 게임으로 처음에 3x3의 빈칸으로 이루어진 게임판에 선공이 "O", 후공이 "X"를 번갈아가면서 빈칸에 표시하는 게임입니다. 가로, 세로, 대각선으로 3개가 같은 표시가 만들어지면 같은 표시를 만든 사람이 승리하고게임이 종료되며 9칸이 모두 차서 더 이상 표시를 할 수 없는 경우에는 무승부로 게임이 종료됩니다.할 일이 없어 한가한 머쓱이는 두 사람이 하는 게임인 틱택토를 다음과 같이 혼자서 하려고 합니다.혼자서 선공과 후공을 둘 다 맡는다.틱택토 게임을 시작한 후 "O"와 "X"를 혼자서 번갈아 가면서 표시를 하면서 진행한다.틱택토는 단순한 규칙으로 게임이 금방 끝나기에 머쓱이는 한 게임이 종료되면 다시 3x3 빈칸을 그린 뒤 다시 게임을 반복했습니다. 그렇게 틱택토..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/VVdaA/btsHOD9rp77/vqZJQl368iMTc2HBvEP9E1/img.png)
문제 문제 설명프로그래머스의 마스코트인 머쓱이는 최근 취미로 당구를 치기 시작했습니다.머쓱이는 손 대신 날개를 사용해야 해서 당구를 잘 못 칩니다. 하지만 끈기가 강한 머쓱이는 열심히 노력해서 당구를 잘 치려고 당구 학원에 다니고 있습니다.오늘도 당구 학원에 나온 머쓱이에게 당구 선생님이"원쿠션"(당구에서 공을 쳐서 벽에 맞히는 걸 쿠션이라고 부르고,벽에 한 번 맞힌 후 공에 맞히면 원쿠션이라고 부릅니다) 연습을 하라면서 당구공의 위치가 담긴 리스트를 건네줬습니다.리스트에는 머쓱이가 맞춰야 하는 공들의 위치가 담겨있습니다.머쓱이는 리스트에 담긴 각 위치에 순서대로 공을 놓아가며 "원쿠션" 연습을 하면 됩니다. 이때, 머쓱이는 항상 같은 위치에 공을 놓고 쳐서 리스트에 담긴 위치에 놓인 공을 맞춥니다.머쓱..