https://leetcode.com/problems/investments-in-2016/description/
질문이 바로 이해가 가지 않아, 질문 이해에 약간의 시간이 더 투자된 문제.
- 같은 ``tiv_2015``의 값을 공유하는 레코드가 2개 이상 존재하는 레코드
- 위도와 경도가 같지 않은(같은 위치가 아니고 고유한) 레코드
- 이 레코드들을 찾아서 각각의 ``tiv_2016``값을 더해서 소수점 2자리까지 반올림
진짜 이런 요구 사항이 실제로 존재할진 모르겠지만...
문제도 잘 다가오지 않고, 힌트도 이런 상황이다.
당연한 걸 힌트랍시고 준 걸 보면, 너무 간단한 문제라고 생각했나 보다.
처음엔 문제를 제대로 이해하지 못해 "윈도우 함수로 밀면서 같고 다른 걸 체크해야 하나?" 같은,
이상한 의문에 빠져있었다.
아무리 생각해도 이런 걸 원하는 건 아닌 거 같다는 생각이 들어 계속 문제를 재확인했다.
다른 사람은 이 문제에 대해 어떻게 생각하는지 궁금하기도 하여 ``Discussion``을 봤다.
사람 생각은 비슷한 것 같더군.
꽤 괜찮은 힌트도 얻을 수 있었기에 적용해 보기로 했다.
각 요구조건에 대해 카운팅을 통해 걸러내기만 하면 문제없을 것 같았다.
``tiv_2015``는 고유하면 안 되고, ``[lat, lon]``은 고유해야 한다.
SELECT tiv_2015
FROM Insurance
GROUP BY tiv_2015
HAVING COUNT(pid) > 1
SELECT lat, lon
FROM Insurance
GROUP BY lat, lon
HAVING COUNT(pid) = 1
이렇게 걸러낼 수 있겠다.
이를 ``WHERE``문을 통해 걸러내면 요구사항에 맞는 레코드들만 남을 것이다.
SELECT ROUND(SUM(tiv_2016), 2) AS tiv_2016
그럼 이렇게 한방에 다 더하면 될 것 같다.
최종 쿼리문은 다음과 같다.
SELECT ROUND(SUM(tiv_2016), 2) AS tiv_2016
FROM Insurance
WHERE tiv_2015 IN (
SELECT tiv_2015
FROM Insurance
GROUP BY tiv_2015
HAVING COUNT(pid) > 1
)
AND (lat, lon) IN (
SELECT lat, lon
FROM Insurance
GROUP BY lat, lon
HAVING COUNT(pid) = 1
);
``Discussion`` 탭에서 인상적인 부분은 다음과 같았다.
실생활에서 마주치지 않을 것 같은 문제들에 시간을 너무 많이 쓰지 말라는 내용에 대해,
진짜 금융권 현업자인진 모르겠으나 비슷한 문제에 직면한 적이 없다고 했다.
하지만 세상에 절대란 없지 않은가.
살다 보면 별별 일이 다 있기 때문에 이런 것들로 연습하는 것은 괜찮다고 생각한다.
그런데 문제 설명은 좀 못했다는 느낌은 조금 있다...
프로그래머스에서 주는 문제가 참 친절했다는 생각이 드는 것 같다.
'Camp > T.I.L.' 카테고리의 다른 글
[TIL #30] 모의 면접을 준비하며 (0) | 2024.10.30 |
---|---|
[TIL #29] 점 찍기 (0) | 2024.10.25 |
[TIL #27] 호텔 대실 (0) | 2024.10.21 |
[TIL #26] 함수 오버로딩의 함정 (0) | 2024.10.18 |
[TIL #25] 전력망을 둘로 나누기 (0) | 2024.10.16 |