PLACES
테이블은 공간 임대 서비스에 등록된 공간의 정보를 담은 테이블입니다. PLACES
테이블의 구조는 다음과 같으며 ID
, NAME
, HOST_ID
는 각각 공간의 아이디, 이름, 공간을 소유한 유저의 아이디를 나타냅니다. ID
는 기본키입니다.
NAME | TYPE |
---|---|
ID | INT |
NAME | VARCHAR |
HOST_ID | INT |
이 서비스에서는 공간을 둘 이상 등록한 사람을 "헤비 유저"라고 부릅니다. 헤비 유저가 등록한 공간의 정보를 아이디 순으로 조회하는 SQL문을 작성해주세요.
예를 들어, PLACES
테이블이 다음과 같다면
ID | NAME | HOST_ID |
---|---|---|
4431977 | BOUTIQUE STAYS - Somerset Terrace, Pet Friendly | 760849 |
5194998 | BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly | 760849 |
16045624 | Urban Jungle in the Heart of Melbourne | 30900122 |
17810814 | Stylish Bayside Retreat with a Luscious Garden | 760849 |
22740286 | FREE PARKING - The Velvet Lux in Melbourne CBD | 30900122 |
22868779 | ★ Fresh Fitzroy Pad with City Views! ★ | 21058208 |
따라서 SQL 문을 실행하면 다음과 같이 나와야 합니다.
ID | NAME | HOST_ID |
---|---|---|
4431977 | BOUTIQUE STAYS - Somerset Terrace, Pet Friendly | 760849 |
5194998 | BOUTIQUE STAYS - Elwood Beaches 3, Pet Friendly | 760849 |
16045624 | Urban Jungle in the Heart of Melbourne | 30900122 |
17810814 | Stylish Bayside Retreat with a Luscious Garden | 760849 |
22740286 | FREE PARKING - The Velvet Lux in Melbourne CBD | 30900122 |
-- 공간을 둘 이상 등록한 사람
-- 아이디 순으로 조회 ASC
SELECT *
FROM PLACES
WHERE HOST_ID IN (
SELECT HOST_ID
FROM PLACES
GROUP BY HOST_ID
HAVING COUNT(HOST_ID) >= 2
)
ORDER BY ID ASC
;
-- < GROUP BY + EXISTS >
SELECT *
FROM PLACES PL1
WHERE EXISTS (
SELECT 1
FROM PLACES PL2
WHERE PL1.HOST_ID = PL2.HOST_ID
GROUP BY HOST_ID
HAVING COUNT(*) >= 2
)
ORDER BY ID;
정수로 이루어진 배열 numbers
가 있습니다. 배열 의 각 원소들에 대해 자신보다 뒤에 있는 숫자 중에서 자신보다 크면서 가장 가까이 있는 수를 뒷 큰수라고 합니다.
정수 배열 numbers
가 매개변수로 주어질 때, 모든 원소에 대한 뒷 큰수들을 차례로 담은 배열을 return 하도록 solution 함수를 완성해주세요. 단, 뒷 큰수가 존재하지 않는 원소는 -1을 담습니다.
numbers
의 길이 ≤ 1,000,000
numbers[i]
≤ 1,000,000numbers | result |
---|---|
[2, 3, 3, 5] | [3, 5, 5, -1] |
[9, 1, 5, 3, 6, 2] | [-1, 5, 6, 6, -1, -1] |
입출력 예 #1
2의 뒷 큰수는 3입니다. 첫 번째 3의 뒷 큰수는 5입니다. 두 번째 3 또한 마찬가지입니다. 5는 뒷 큰수가 없으므로 -1입니다. 위 수들을 차례대로 배열에 담으면 [3, 5, 5, -1]이 됩니다.
입출력 예 #2
9는 뒷 큰수가 없으므로 -1입니다. 1의 뒷 큰수는 5이며, 5와 3의 뒷 큰수는 6입니다. 6과 2는 뒷 큰수가 없으므로 -1입니다. 위 수들을 차례대로 배열에 담으면 [-1, 5, 6, 6, -1, -1]이 됩니다.
class Solution {
public int[] solution(int[] numbers) {
// 시초 날 거지만 생각나는데로 해보자
loop : for(int i = 0 ; i < numbers.length - 1 ; i++){
int front = numbers[i];
for(int j = i+1 ; j < numbers.length; j++){
int back = numbers[j];
if(front < back){
numbers[i] = back;
continue loop;
}
}
numbers[i] = -1 ;
}
numbers[numbers.length - 1] = -1;
return numbers;
}
}
import java.util.*;
class Solution {
public int[] solution(int[] numbers) {
boolean[] visited = new boolean[numbers.length];
// 스택에는 인덱스를 넣는다.
Stack<Integer> stack = new Stack<>();
for(int i = 0 ; i < numbers.length ; i++){
// 비어있지 않고, 뒷 수가 크면
while(!stack.isEmpty() && numbers[stack.peek()] < numbers[i]){
// 업데이트
visited[stack.peek()] = true;
numbers[stack.pop()] = numbers[i];
}
stack.push(i);
}
// 뒷 큰수가 존재하지 않는 원소 예외처리
for(int i = 0 ; i < numbers.length ; i++){
if(!visited[i]) numbers[i] = -1;
}
return numbers;
}
}
// 뒷 큰수가 존재하지 않는 원소 예외처리 다른 방법 WoW
while (!stack.isEmpty()) {
numbers[stack.pop()] = -1;
}