๋ฌธ์
https://leetcode.com/problems/asteroid-collision/
์ฃผ์ด์ง `asteroids` ๋ฐฐ์ด์ ์ฐ์ํ ์ํ์ฑ(asteroid)์ ๋ํ๋ด๋ ์ ์๋ก ์ด๋ฃจ์ด์ ธ์๋ค.
๊ฐ ์ํ์ฑ์ ์ ๋๊ฐ์ ์ด๊ฒ์ ์ฌ์ด์ฆ๋ฅผ ๋ํ๋ด๊ณ , ๋ถํธ๋ ๋ฐฉํฅ์ ๋ํ๋ธ๋ค(+๋ ์ค๋ฅธ์ชฝ, -๋ ์ผ์ชฝ). ์ํ์ฑ๋ค์ ๊ฐ์ ์๋๋ก ์์ง์ธ๋ค.
๋ชจ๋ ์ถฉ๋์ด ๋๋ ํ์ ์ํ์ฑ์ ์ํ๋ฅผ ๋ฐํํ๋ผ. ๋ง์ฝ ๋ ์ํ์ฑ์ด ๋ง๋๋ค๋ฉด, ๋ ์์ ๊ฒ์ด ํญ๋ฐํ๋ค. ๋ง์ฝ ๋ ์ํ์ฑ์ด ๊ฐ์ ํฌ๊ธฐ๋ผ๋ฉด, ๋ชจ๋ ํญ๋ฐํ๋ค. ๊ฐ์ ๋ฐฉํฅ์ผ๋ก ์์ง์ด๋ ๋ ์ํ์ฑ์ ์ ๋ ๋ง๋์ง ์๋๋ค.
ํ์ด
class Solution {
public int[] asteroidCollision(int[] asteroids) {
ArrayDeque<Integer> st = new ArrayDeque<>();
for (int asteroid : asteroids) {
if (st.isEmpty() || asteroid > 0) {
st.push(asteroid);
} else {
while (!st.isEmpty() && st.peek() > 0 && Math.abs(asteroid) > st.peek()) { // ์คํ ์์ ์ ๊ฑฐ
st.pop();
}
if (!st.isEmpty() && Math.abs(asteroid) == st.peek()) {
st.pop();
} else if (st.isEmpty() || st.peek() < 0) {
st.push(asteroid);
}
}
}
int[] result = new int[st.size()];
for (int i = st.size() - 1; i >= 0; i--) result[i] = st.pop();
return result;
}
}
๋ฌธ์ ๋ฅผ ์ดํดํ๊ธฐ ๊ต์ฅํ ์ด๋ ค์ ๋ค. ์คํ์ ๊ฐ๋ ์ ๋ฃ์ด์ผ ์ดํด๊ฐ ํธํ๋ค.
์คํ์ ๊ฐ์ฅ ์ ์์์ ํ์ฌ ์์์ ๋ถํธ๊ฐ ๋ค๋ฅผ ๊ฒฝ์ฐ์ ๋ฌด์กฐ๊ฑด ์ต์ ์์๋ถํฐ ์ถฉ๋ํ๋ค.
- ์คํ์๋ ์ต๋ํ ํ๋์ ๋ถํธ๋ง ๋ฃ๋๋ค. (๋๋ +๋ฅผ ์ ํํ๋ค)
- ์คํ์ด ๋น์๊ฑฐ๋, ํ์ฌ ์ํ์ฑ์ด + ์ด๋ฉด ์คํ์ ๋ฃ๋๋ค. ( ์คํ ๋ด๋ถ์ ์๋ ์์๋ค๋ ๋ชจ๋ + ์ผํ ๋.. )
- ํ์ฌ ์ํ์ฑ์ด - ์ด๊ณ , ์คํ์ ์ต์์ ์์๊ฐ + ์ด๋ฉด์, ํ์ฌ ์ํ์ฑ์ ์ ๋๊ฐ์ด ๋ ํฌ๋ค๋ฉด,
์คํ ์ต์๋จ ์ํ์ฑ์ ์ถฉ๋๋์ด ์์ด์ง๋ฏ๋ก, ์ต์๋จ ์์๋ฅผ ์ ๊ฑฐํ๋ค.
-> ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ ๋๊น์ง ๋ฐ๋ณตํ๋ค. - ํด๋น ์ํ์ฑ์ผ๋ก ์คํ ๋ด๋ถ์ pop()์ ์๋ฃํ์์ผ๋ฏ๋ก, ํด๋น ์ํ์ฑ์ ๋ฃ์์ง ๋ง์ง๋ฅผ ๊ฒฐ์ ํ๋ค.
- ์ ๋๊ฐ์ด ๊ฐ๋ค๋ฉด, ๋ ๋ค ํญ๋ฐํ๋ฏ๋ก ์คํ ์ต์๋จ ์ํ์ฑ๋ pop
- ์คํ์ด ๋น์๊ฑฐ๋, ์คํ ๋ด๋ถ ์์๊ฐ -๋ฐ์ ๋จ์ง ์์๋ค๋ฉด ํ์ฌ ์ํ์ฑ๋ stack์ผ๋ก push
์๊ฐ ๋ณต์ก๋: O(n), ๊ณต๊ฐ ๋ณต์ก๋: O(n)
'๐ ์๊ณ ๋ฆฌ์ฆ > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[LeetCode] 225. Implement Stack using Queues (ํด์, Java ํ์ด) (0) | 2023.08.28 |
---|---|
[LeetCode] 445. add Two Numbers 2 (ํด์, Java ํ์ด) (0) | 2023.07.17 |
[SWEA] 1223๋ฒ ๊ณ์ฐ๊ธฐ2 (Java) (0) | 2021.08.20 |
[๋ฐฑ์ค]1158๋ฒ ์์ธํธ์ค๋ฌธ์ (0) | 2021.08.10 |
[๋ฐฑ์ค]1918๋ฒ ํ์ํ๊ธฐ์ (0) | 2021.08.09 |