๐ง ๋ฌธ์ ์ด๋ฆ
์์ด๊ณผ ๊ตฌ๊ฐ ์ฟผ๋ฆฌ 2
๐งพ ๋ฌธ์ ์ค๋ช
์ ์ ๋ฐฐ์ด arr์ 2์ฐจ์ ์ ์ ๋ฐฐ์ด queries์ด ์ฃผ์ด์ง๋๋ค. queries์ ์์๋ ๊ฐ๊ฐ ํ๋์ query๋ฅผ ๋ํ๋ด๋ฉฐ, [s, e, k] ๊ผด์ ๋๋ค.
๊ฐ query๋ง๋ค ์์๋๋ก s ≤ i ≤ e์ธ ๋ชจ๋ i์ ๋ํด k๋ณด๋ค ํฌ๋ฉด์ ๊ฐ์ฅ ์์ arr[i]๋ฅผ ์ฐพ์ต๋๋ค.
๊ฐ ์ฟผ๋ฆฌ์ ์์์ ๋ง๊ฒ ๋ต์ ์ ์ฅํ ๋ฐฐ์ด์ ๋ฐํํ๋ solution ํจ์๋ฅผ ์์ฑํด ์ฃผ์ธ์.
(๋จ, ํน์ ์ฟผ๋ฆฌ์ ๋ต์ด ์กด์ฌํ์ง ์์ผ๋ฉด -1์ ์ ์ฅํฉ๋๋ค.)
๐ค๐ป ์ ํ ์ฌํญ
- 1 ≤ arr์ ๊ธธ์ด ≤ 1,000
- 0 ≤ arr์ ์์ ≤ 1,000,000
- 1 ≤ queries์ ๊ธธ์ด ≤ 1,000
- 0 ≤ s ≤ e < arr์ ๊ธธ์ด
- 0 ≤ k ≤ 1,000,000
๐ฉ ์ ์ถ๋ ฅ ์์
- arr : [0, 1, 2, 4, 3]
- queries : [[0, 4, 2],[0, 3, 2],[0, 2, 2]]
- return : [3, 4, -1]
์ฒซ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ๋ฒ์์๋ 0, 1, 2, 4, 3์ด ์์ผ๋ฉฐ ์ด ์ค 2๋ณด๋ค ํฌ๋ฉด์ ๊ฐ์ฅ ์์ ๊ฐ์ 3์ ๋๋ค.
๋ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ๋ฒ์์๋ 0, 1, 2, 4๊ฐ ์์ผ๋ฉฐ ์ด ์ค 2๋ณด๋ค ํฌ๋ฉด์ ๊ฐ์ฅ ์์ ๊ฐ์ 4์ ๋๋ค.
์ธ ๋ฒ์งธ ์ฟผ๋ฆฌ์ ๋ฒ์์๋ 0, 1, 2๊ฐ ์์ผ๋ฉฐ ์ฌ๊ธฐ์๋ 2๋ณด๋ค ํฐ ๊ฐ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ [3, 4, -1]์ return ํฉ๋๋ค.
โ๏ธ ๋ฌธ์ ํ์ด
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ 1 - ArrayList๋ง ์ฌ์ฉ
์ฝ๋๊ฐ ์กฐ๊ธ ๋ณต์กํด์ง๊ธด ํ์ง๋ง, ์ผ๋จ ๋๋ ์ด๋ป๊ฒ ํ์๋๋ฉด,
1. for-each๋ฌธ์ ํตํด queries์ ํ๋ค์ query๋ก ๋ฐ๋๋ค.
2. ์ด์ค for๋ฌธ์ ์ด์ฉํด ์ธ๋ฑ์ค query[0]๋ถํฐ query[1]์ ํด๋นํ๋ arr๊ฐ๋ค์ query[2]์ ๋น๊ตํด ํฌ๋ฉด ์ผ๋จ ArrayList์ addํ๋ค.
3. ArrayList๊ฐ ๋น์๋ค๋ฉด -1์, ๋ค์ด์๋ค๋ฉด ๊ฐ์ฅ ์์ ๊ฐ์ Collections.min(arrayList)์ ์ด์ฉํด answer์ ์ถ๊ฐํ๋ค.
⇒ ์ด ๊ณผ์ ์์ import java.util.Collection; ์ถ๊ฐ ์ํด์ค์ ์๋ฌ ๋ฌ๋ค;; (์ธํ ๋ฆฌ์ ์ด์ผ ๊ณ ๋ง์)
4. ArrayList๋ฅผ int[]๋ก ๋ณํํด์ฃผ๋ฉด ๋๋๋ค.
import java.util.ArrayList;
import java.util.Collections;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
ArrayList<Integer> answer = new ArrayList<>();
for (int[] query : queries) {
ArrayList<Integer> list = new ArrayList<>();
for (int i = query[0]; i <= query[1]; i++) {
if (arr[i] > query[2]) {
list.add(arr[i]);
}
}
if (list.isEmpty()) {
answer.add(-1);
} else {
answer.add(Collections.min(list));
}
}
int[] intArray = new int[answer.size()];
for (int i = 0; i < answer.size(); i++) {
intArray[i] = answer.get(i);
}
return intArray;
}
}
๋ฌธ์ ํ๋ฉด์ ๊ฝค ๊ณ ๋ฏผ์ ๋ง์ด ํ๊ณ , ํ์ธ ํ์ ๋ ์คํจ๋ ๋ช ๋ฒ ๋์๋ค. 'queries[2]๋ณด๋ค ํฐ ์ ์ค์์ ๊ฐ์ฅ ์์ ์'๋ฅผ ์ด๋ป๊ฒ ํด๊ฒฐํด์ผ ํ๋ ๊ณ ๋ฏผ์ด ์์๋ค.
ArrayList๋ก ํ๋ฉด ๋์ง๋ง, ๊ทธ๋ ๊ฒ ํ๋ฉด ๋ค์ int[]๋ก ๋ณํํ๋ฉด์ ์ฝ๋๊ฐ ๊ธธ์ด์ง ๊ฒ ๊ฐ์ ๋ ๊ฐ๋จํ ๋ต์ ์ฐพ๊ณ ์ถ์ด ๋จธ๋ฆฌ ์ฅ์ด์ง๋ค๊ฐ ๊ทธ๋ฅ ArrayList๋ก ํ์๋ค.
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ 2 - fill, ์ผํญ ์ฐ์ฐ์
1. ์ด๋ถ์ Arrays.filll()๋ฉ์๋๋ฅผ ์ด์ฉํด์ answer๋ฅผ ๋ชจ๋ -1๋ก ์ฑ์ ๋ค.
2. ๊ทธ ํ์ if๋ฌธ์ ์ด์ฉํด query[2]์ answer[idx] ๊ฐ์ ๋น๊ตํ๋ค.
3. answer๊ฐ์ด ๋ ํฌ๋ค๋ฉด, ๊ทธ ์ค์์ ๊ฐ์ฅ ์์ ๊ฐ์ ์ฐพ๊ธฐ ์ํด ์ผํญ ์ฐ์ฐ์๋ฅผ ์ด์ฉํ๋ค.
⇒ answer[idx] = answer[idx] == -1 ? arr[i] : Math.min(answer[idx], arr[i]);
ํ์ด๋ฐฉ๋ฒ ๋ณด๋ฉด์ ๊ฐํํ๋ค. ์ฒ์๋ถํฐ -1๋ก ์ฑ์ด ํ์ -1์ด๋ฉด ๋ฃ๊ณ , ์๋๋ฉด ๋ ์์ ๊ฐ์ ๋ฃ๋๋ค.
๊ทธ๋ฆฌ๊ณ Array.fill ๋ฉ์๋๋ ์ฒ์ ์์์ ์ ์ฉํ ํ์ด๋ฒ์ธ ๊ฒ ๊ฐ๋ค.
import java.util.Arrays;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
Arrays.fill(answer, -1);
for (int idx = 0; idx < queries.length; idx++) {
int[] query = queries[idx];
int s = query[0], e = query[1], k = query[2];
for (int i = s; i <= e; i++) {
if (k < arr[i]) {
answer[idx] = answer[idx] == -1 ? arr[i] : Math.min(answer[idx], arr[i]);
}
}
}
return answer;
}
}
๐ ํด๊ฒฐ ๋ฐฉ๋ฒ 3 - Stream
์ด๋ ๊ฒ ์์ ๊น๋ํ Stream์ ํตํด ํธ์ ๋ถ๋ ๊ณ์ จ๋ค. ๋ ์์ง stream์ ์ ๋๋ก ์ธ ์ค ๋ชฐ๋ผ์.. ๋ ๊ณต๋ถํ ๋ค์ stream์ผ๋ก ํ์ด๋ด์ผ ํ ๊ฒ ๊ฐ๋ค.
import java.util.stream.IntStream;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = {};
return IntStream.range(0, queries.length)
.map(q -> IntStream.rangeClosed(queries[q][0], queries[q][1])
.map(i -> arr[i])
.filter(i -> i > queries[q][2])
.min().orElse(-1)
).toArray();
}
}
'๐ algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ฝ๋ผ์ธ ์์ด ๋ง๋ค๊ธฐ (0) | 2023.11.23 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] ์์ด๊ณผ ๊ตฌ๊ฐ ์ฟผ๋ฆฌ 4 JAVA(์๋ฐ) ๋ฌธ์ ํ์ด ๐ (0) | 2023.09.26 |
ํ๋ก๊ทธ๋๋จธ์ค | ์ ์กฐ์ํ๊ธฐ 2 JAVA(์๋ฐ) (0) | 2023.09.18 |
ํ๋ก๊ทธ๋๋จธ์ค | ์ ์กฐ์ํ๊ธฐ1 JAVA(์๋ฐ) (1) | 2023.09.17 |
ํ๋ก๊ทธ๋๋จธ์ค | ๋ง์ง๋ง ๋ ์์ JAVA (์๋ฐ) (0) | 2023.09.16 |