[DAY-6] JS ์ฃผ์ ๋ฌธ๋ฒ(6)
๐ ํท๊ฐ๋ ธ๋ & ๋ชฐ๋๋ ๋ถ๋ถ๋ค๋ง ์ ๋ฆฌํ๋ ๋๋ง์ TIL
๐ฏ ๋ชจ๋ ๊ฐ์ ๋ด์ฉ์ ์ ์ง ์์์!
์ค๋์ ์๊ฐ์?
ํ์ด์ฌ์ผ๋ก ์ฝํ
์ค๋น๋ฅผ ํ์์ด์, JS๋ก ํ์๋ ๋๋ฌด ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๋ค์.
์ง๊ธ์ด๋ผ๋ JS๋ก ์ฐ์ตํด์ผ ํ๋.. ๊ณ ๋ฏผ ์ค์
๋๋ค.
์ด๋ป๊ฒ ํด์ผํด..๐ฏ
๊ทธ๋ฆฌ๋๋ ์ง๊ด์ ์ธ ๋ฌธ์ ๋ฅผ ํ ์ ์์ด์ ์ข์ง๋ง,
์ง๊ด์ ์ธ ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์๊ฐ๋์ง ์์ผ๋ฉด ์ ๋ ๋ชป ํ ๊ฒ ๊ฐ๋ค์.
๋ง์ด ํ์ด๋ณด๋ ๊ฒ์ด ์ค๋ ฅ์ด ํฅ์๋๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ด๊ฒ ์ฃ ?
[1] BFS & DFS
[1-1] BFS (๋๋น ์ฐ์ ํ์)
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๊ฐ์ ๊น์ด์ ํด๋นํ๋ ์ ์ ๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
ํน์ง
- Queue๋ฅผ ์ฌ์ฉํด์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ์์ ์ง์ ์์ ๊ฐ๊น์ด ์ ์ ๋ถํฐ ํ์ํฉ๋๋ค.
- V๊ฐ ์ ์ ์ ์, E๊ฐ ๊ฐ์ ์ ์ ์ผ๋, BFS์ ์๊ฐ๋ณต์ก๋๋ O(V+E)์ ๋๋ค.
[1-2] DFS (๊น์ด ์ฐ์ ํ์)
๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ์ต๋ํ ๊น์ ์ ์ ๋ถํฐ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
ํน์ง
- Stack์ ์ฌ์ฉํด์ ๊ตฌํํ ์ ์์ต๋๋ค.
- ์์ ์ ์ ์์ ๊น์ ๊ฒ ๋ถํฐ ์ฐพ์ต๋๋ค.
- V๊ฐ ์ ์ ์ ์, E๊ฐ ๊ฐ์ ์ ์ ์ผ๋, DFS์ ์๊ฐ๋ณต์ก๋๋ O(V+E)์ ๋๋ค.
[+] ์ค์ต ์ฝ๋ - ์ฌํ ๊ฒฝ๋ก
DFS๋ก ํ์ด์ฃผ์์ต๋๋ค.
- ์ ์ถ ์ฝ๋
function solution(tickets) {
let answer = ["ICN"];
let visit = new Array(tickets.length).fill(0);
tickets.sort();
function dfs(str, index) {
if (index === tickets.length) {
return true;
}
for (let i = 0; i < tickets.length; i += 1) {
if (visit[i] == 0 && tickets[i][0] == str) {
visit[i] = 1;
answer.push(tickets[i][1]);
if (dfs(tickets[i][1], index + 1)) {
return true;
}
visit[i] = 0;
answer.pop();
}
}
return false;
}
dfs("ICN", 0);
return answer;
}
[2] ๊ทธ๋ฆฌ๋(Greedy)
๋งค ์ ํ์์ ์ง๊ธ ์ด ์๊ฐ ๊ฐ์ฅ ์ต์ ์ธ ๋ต์ ์ ํํ๋ ์๊ณ ๋ฆฌ์ฆ์ ๋๋ค.
๋ฐ๋ผ์ ์ต์ ํด๋ฅผ ๋ณด์ฅํด์ฃผ์ง๋ ์์ต๋๋ค.
[2-1] ๊ทธ๋ฆฌ๋ ํน์ง
- ์ต์ ํด๋ฅผ ๊ตฌํ๋ ์๊ณ ๋ฆฌ์ฆ๋ณด๋ค ๋น ๋ฅธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๋ณดํต ์ ํ ์๊ฐ์ ๊ฐ์ง๋๋ค. (O(n)) - ํฌ๋ฃจ์ค์นผ, ๋ค์ต์คํธ๋ผ ์๊ณ ๋ฆฌ์ฆ ๋ฑ์ ์ฌ์ฉ๋ฉ๋๋ค.
- ์ง๊ด์ ์ธ ๋ฌธ์ ํ์ด์ ์ ํฉํฉ๋๋ค.
[+] ์ค์ต ์ฝ๋ - ํฐ ์ ๋ง๋ค๊ธฐ
๐ ์ ํ์ ์ธ ๊ทธ๋ฆฌ๋ ๋ฌธ์ ์ ๋๋ค.
์ฝ๋ฉํ ์คํธ๋ฅผ ์ค๋นํ๋ฉด์ ๊ทธ๋ฆฌ๋๋ฅผ ๋ง์ด ์ํ์ด๋ดค์๋๋ฐ, ์ด์ ๋ผ๋ ์ด์ฌํ ํ์ด๋ด์ผ๊ฒ ์ด์.
๋ง์ง๋ง์ k๊ฐ ๋จ๋ ๊ฒฝ์ฐ๋ฅผ ์๊ฐํ์ง ๋ชปํด์
ํโฆโฆโฆsplice ๊ตฌ์ญ ์๊ฐํ๋๋ผ ์๊ฐ์ด ๋๋ฌด ์ค๋ ๊ฑธ๋ ธ์ต๋๋ค.
- ์ ์ถ ์ฝ๋
function solution(number, k) {
numArr = [];
for (let i = 0; i < number.length; i += 1) {
const num = number[i];
while (k > 0) {
if (numArr[numArr.length - 1] < num) {
numArr.pop();
k -= 1;
} else break;
}
numArr.push(num);
}
numArr.splice(numArr.length - k, k);
answer = numArr.join("");
return answer;
}
๋๊ธ๋จ๊ธฐ๊ธฐ