Lv1. K번째 수 (Python)
링크: https://school.programmers.co.kr/learn/courses/30/lessons/42748
내가 작성한 코드
def solution(array, commands):
answer = []
for i, j, k in commands:
sub = array[i-1 : j] # i는 1부터 세는 번호이므로 인덱스로 바꾸기 위해 i-1을 사용 (파이썬은 0부터 셈)
sub_sorted = sorted(sub) # 잘라낸 sub 리스트를 오름차순으로 정렬
answer.append(sub_sorted[k-1]) # 정렬된 리스트에서 k번째 값을 선택. k는 1부터 세는 번호이므로 인덱스로 바꾸기 위해 k-1 사용
return answer
새로 배운 코드
def solution(array, commands):
return list(
map( # map의 결과를 list로 변환
lambda x:
# lambda x: x는 commands 안에 들어있는 하나의 명령 [i, j, k]
sorted(array[x[0]-1 : x[1]])[x[2]-1],
# x[0] = i(i번째), x[1] = j(j번째)
# i는 1부터 세는 번호이므로 인덱스로 바꾸기 위해 x[0]-1 사용
# 잘라낸 리스트를 오름차순으로 정렬
# x[2] = k(k번째 값)
# k는 1부터 세는 번호이므로 인덱스로 바꾸기 위해 k-1 사용
commands)) # commands 리스트의 각 원소를 하나씩 lambda 함수에 전달
Lv3. 오랜 기간 보호한 동물(1) (MySQL)
링크: https://school.programmers.co.kr/learn/courses/30/lessons/59044?language=mysql
내가 작성한 코드
-- 풀이1 (LEFT JOIN + IS NULL)
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME ASC
LIMIT 3;
-- 풀이2 (NOT EXISTS)
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
WHERE NOT EXISTS(SELECT 1 -- 조건을 만족하는 행이 있으면 그냥 1 이라는 값 반환
FROM ANIMAL_OUTS O
WHERE O.ANIMAL_ID = I.ANIMAL_ID)
ORDER BY I.DATETIME
LIMIT 3;
EXISTS / NOT EXISTS
- 값이 아닌 행 존재 여부만 파악
- EXISTS(서브쿼리) : 조건을 만족하는 행이 하나라도 있으면 True
- NOT EXISTS(서브쿼리) : 조건을 만족하는 행이 하나도 없으면 True
Orcale
-- 풀이1 (FETCH)
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME ASC
FETCH FIRST 3 ROWS ONLY
-- 풀이2 (NOT EXISTS + FETCH)
SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
WHERE NOT EXISTS(SELECT 1
FROM ANIMAL_OUTS O
WHERE I.ANIMAL_ID = O.ANIMAL_ID)
ORDER BY I.DATETIME
FETCH FIRST 3 ROWS ONLY
-- 풀이3 (ROWNUM)
SELECT NAME, DATETIME
FROM (SELECT I.NAME, I.DATETIME
FROM ANIMAL_INS I
LEFT JOIN ANIMAL_OUTS O
ON I.ANIMAL_ID = O.ANIMAL_ID
WHERE O.ANIMAL_ID IS NULL
ORDER BY I.DATETIME ASC) T -- 별칭 붙이면 안전함
WHERE ROWNUM <= 3
ORDER BY T.DATETIME'코딩테스트' 카테고리의 다른 글
| [26.01.30 코테(Python/MySQL)]-명예의 전당(1)&식품분류별 가장 비싼 식품의 정보 조회하기 (0) | 2026.01.30 |
|---|---|
| [26.01.29 코테(Python/MySQL)]-콜라 문제&있었는데요 없었습니다 (0) | 2026.01.29 |
| [26.01.27 코테(Python/MySQL/Oracle)]-푸드 파이트 대회&카테고리 별 도서 판매량 집계하기 (0) | 2026.01.27 |
| [26.01.26 코테(Python/MySQL/Oracle)]-시저 암호&진료과별 총 예약 횟수 출력하기 (0) | 2026.01.26 |
| [26.01.23 코테(Python/MySQL)]-최소직사각형&오랜 기간 보호한 동물(2) (0) | 2026.01.23 |