ํฐ์คํ ๋ฆฌ ๋ทฐ
๋ฌธ์
๋ฌธ์ ์ค๋ช
0 ๋๋ ์์ ์ ์๊ฐ ์ฃผ์ด์ก์ ๋, ์ ์๋ฅผ ์ด์ด ๋ถ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ์์๋ด ์ฃผ์ธ์.
์๋ฅผ ๋ค์ด, ์ฃผ์ด์ง ์ ์๊ฐ [6, 10, 2]๋ผ๋ฉด [6102, 6210, 1062, 1026, 2610, 2106]๋ฅผ ๋ง๋ค ์ ์๊ณ , ์ด์ค ๊ฐ์ฅ ํฐ ์๋ 6210์ ๋๋ค.
0 ๋๋ ์์ ์ ์๊ฐ ๋ด๊ธด ๋ฐฐ์ด numbers๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ์์๋ฅผ ์ฌ๋ฐฐ์นํ์ฌ ๋ง๋ค ์ ์๋ ๊ฐ์ฅ ํฐ ์๋ฅผ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ ์ฌํญ
- numbers์ ๊ธธ์ด๋ 1 ์ด์ 100,000 ์ดํ์ ๋๋ค.
- numbers์ ์์๋ 0 ์ด์ 1,000 ์ดํ์ ๋๋ค.
- ์ ๋ต์ด ๋๋ฌด ํด ์ ์์ผ๋ ๋ฌธ์์ด๋ก ๋ฐ๊พธ์ด return ํฉ๋๋ค.
์ ์ถ๋ ฅ ์
numbersreturn
[6, 10, 2] | "6210" |
[3, 30, 34, 5, 9] | "9534330" |
๋ฌธ์ ํ์ด
https://choi95.tistory.com/120?category=881084
์ค๋ณต์ ํ์ฉํ์ง ์๋ ์๋ฅผ ๊ตฌํ๋ค๋ ์ ์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ด ๊ตฌํ๊ธฐ ๋ฌธ์ ์ ๊ฐ์ด ๊น์ด ํ์(DFS)๋ฅผ ํตํด ํ์ดํ์๋ค.
์ฝ๋
function solution(numbers) {
var answer = "";
let max = Number.MIN_SAFE_INTEGER;
let n = numbers.length;
let ch = Array.from({ length: n }, () => 0);
let tmp = [];
function DFS(L) {
if (L === n) {
max = Math.max(max, Number(tmp.join('')));
return;
} else {
for (let i = 0; i < n; i++) {
if (ch[i] === 0) {
ch[i] = 1;
tmp.push(numbers[i]); //์ฌ๊ท๋ฅผ ํ ๋ฒ์ฉ ํธ์ถ๋ ๋๋ง๋ค ๊ฒฝ์ฐ์ ์๋ฅผ ์์์ ๋ฐฐ์ด์ push
DFS(L + 1);
tmp.pop(numbers[i]); //๋ฐฑํธ๋ํน์ ํ ๊ฒฝ์ฐ์๋ ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก ์ฐธ์กฐ๋ ์๋ฅผ ๋ค์ pop
ch[i] = 0;
}
}
}
}
DFS(0);
answer = String(max);
return answer;
}
์ค๋ต
์ฝ๋ ์คํ์ ํ์ ๋๋ ์์ ์ผ์ด์ค๋ฅผ ๋ชจ๋ ํต๊ณผํ์์ง๋ง ํ ์คํธ ์ผ์ด์ค๋ฅผ ๋๋ ธ์ ๋๋ ์๊ฐ ์ด๊ณผ๋ก ์ธํด ์ค๋ต ์ฒ๋ฆฌ๋์๋ค.
๋ฌธ์ ์ ๋ก์ง์ ๋ง๋ ๊ฒ ๊ฐ์ง๋ง ์ฌ๊ท ํจ์๋ฅผ ํธ์ถํ๋ฉฐ ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ ๋ฐฉ์์ผ๋ก ํ์๊ธฐ ๋๋ฌธ์ ์๊ฐ ๋ณต์ก๋ ํจ์จ์ด ์ข์ง ์์ ๊ฒ ๊ฐ๋ค.
๋ฌธ์์ด ์ฐ๊ฒฐ ์ฐ์ฐ์ธ +์ ์ผ๋์ ๋๊ณ ์์๋ค๋ฉด ๊ต์ฅํ ๊ฐ๋จํ ๋ฌธ์ ์๋ค.๋ฐฐ์ด ๋ด ๊ฐ ์์๋ฅผ ๋ฌธ์ ํ์ ์ผ๋ก ์นํํด์ค ๋ค์ ๋ฌธ์ ์ฐ๊ฒฐ ์ฐ์ฐ์ ํ์ฌ ์ ๋ ฌ(sort)๋ง ํด์ฃผ๋ฉด ๋์๋ค.
Array.prototype.sort()
ํด๋น ๋ฌธ์ ๋ฅผ Array.prototype.sort() ๋ฉ์๋์ ๊ดํด์ ์ค์ํ ์ฌํญ์ ๊ณต๋ถํ ์ ์์ด์ ํฌ์คํ ํด๋๊ณ ์ ํ๋ค.
์ง๊ธ๊น์ง๋ sort() ๋ฉ์๋ ๋ด ์ฝ๋ฐฑ ํจ์์ ๋ ์ธ์ a, b์ ๋ํด์ ์ ๋ง ๋ง์ฐํ๊ฒ ์์์ ๋ถ์ด ์๋ ์ซ์๋ผ๊ณ ๋ง ์๊ฐ์ ํ์์ง๋ง ํด๋น ๋ฌธ์ ๋ฅผ ํ์ดํ๋ค ๋ณด๋, ์ด์ ๋ํด์ ๋ค์ ํ ๋ฒ ์๊ฐํด๋ณด๊ฒ ๋์๋ค.
[5, 3, 4, 2, 1]
a & b = ( 5, 3 / 3, 4 / 4, 1/ 1, 2 ... )
=> ๊ณผ์ฐ ๋ ์ธ์๊ฐ ์ด๋ฐ ์์ผ๋ก ๋จ์ํ ๋ถ์ด ์๋ ์ซ์์ผ๊น?
์ด์ ๊ด๋ จ๋์ด ๊ตฌ๊ธ๋งํ์ฌ ์ฐพ์ ๋ณด๋, ๊ทธ๋ด ์๋ ์๊ณ ๊ทธ๋ ์ง ์์ ์๋ ์๋ค๋ ๋ต์ ์ฐพ์ ์ ์์๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ์์ง์ ์ค๊ณ ๋ ์๊ณ ๋ฆฌ์ฆ์ด ๊ณ์ฐ ์ ์ฐจ๋ฅผ ๋์ ์ผ๋ก ๊ฒฐ์ ํ๋ค๋ ๊ฒ์ด๋ค.
Mozilla๋ ๋ณํฉ ์ ๋ ฌ์ ์ฌ์ฉํ์ง๋ง ์ค๋ ๋ Chrome์ v8 ์์ค ์ฝ๋์์๋ ๋ ์์ ๋ฐฐ์ด์ QuickSort ๋ฐ InsertionSort๋ฅผ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด ์ฝ์ ์ ๋ ฌ๋ฅผ ํตํด ์ ๋ฐฐ์ด์ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ ๊ณผ์ ์ ์ดํด ๋ณด์.
a(๊ธฐ์ค) - b
5 - 3 = 2 (return ์์ => ์์ ๋ฐ๋)
3 - 4 = -1 (return ์์ => ์์ ๊ทธ๋๋ก)
3 - 2 = 1 (return ์์ => ์์ ๋ฐ๋)
2 - 1 = 1 (return ์์ => ์์ ๋ฐ๋)
์ด๋ฐ ์์ผ๋ก ๋จ์ํ ์์ ๊ณผ ์ธ์ ํด ์๋ ๋ชจ๋ ์๋ฅผ ๋น๊ตํ๋ ๋ฒ๋ธ ์ ๋ ฌ ๋ฐฉ์์ผ๋ก ์ ๋ ฌ๋ ์๋ ์์ง๋ง ๊ณ ์ ๋ ๊ธฐ์ค ํ์ ๊ทธ ๋ค์ ๊ฐ๋ค์ ์ํํ๋ฉฐ ๋น๊ตํ๋ ์ฝ์ ์ ๋ ฌ ๋ฐฉ์์ผ๋ก๋ sort() ๋ฉ์๋์ compare ์ฐ์ฐ ๊ณผ์ ์ด ์งํ๋ ์ ์๋ค.
์์ง๊น์ง sort() ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง์ ๋ํด์ ์ ํํ ํ์ ํ์ง ๋ชปํ์์ง๋ง, ์ด์ ์ sort() ๋ฉ์๋์ ๋ํด ํธํ๋ ์ง์์ผ๋ก ์ธํด ์ ํ์ฉํ์ง ๋ชปํ์๊ธฐ์ ํด๋น ๋ฌธ์ ๋ ๋งค์ฐ ์ ์๋ฏธํ๋ค.
์ฝ๋
function solution(numbers) {
const answer = numbers.map((number) => number.toString()).sort((a, b) => (b+a) - (a+b)).join("") //๋ฌธ์์ด์ด๊ธฐ์ ๊ฐ๋ฅํ + ์ฐ๊ฒฐ ์ฐ์ฐ์ ํตํ value ๋น๊ต
return answer.replace(/^0+/, "0"); // ๋ฌธ์ ๋งจ ์์ 0์ด 1ํ์ด์ ๋ฐ๋ณต๋์ด์ง ๊ฒฝ์ฐ 0์ผ๋ก ์นํ
}
๊ด๋ จ ๋ฌธ์ _๋ฌธ์์ด ๋ด ๋ง์๋๋ก ์ ๋ ฌํ๊ธฐ
function solution(strings, n) {
var answer = [];
answer = strings.sort((a, b) => {
if(a[n].charCodeAt() === b[n].charCodeAt()) {
let len = Math.max(a.length, b.length);
for(let i = 0; i < len; i++) {
if(a[i] !== b[i]) return a[i] - b[i];
};
} else return a[n] - b[n]
});
return answer;
}