๐งฉ๋งํฌ
https://school.programmers.co.kr/learn/courses/30/lessons/389481
ํ๋ก๊ทธ๋๋จธ์ค
SW๊ฐ๋ฐ์๋ฅผ ์ํ ํ๊ฐ, ๊ต์ก, ์ฑ์ฉ๊น์ง Total Solution์ ์ ๊ณตํ๋ ๊ฐ๋ฐ์ ์ฑ์ฅ์ ์ํ ๋ฒ ์ด์ค์บ ํ
programmers.co.kr
๐งฉ๋ฌธ์ ํ์ด
์ญ์ lv3 ๋ต๊ฒ ๊ต์ฅํ ์ด๋ ต๋ค. ๋ฌธ์ ๋ฅผ ํ๊ธฐ์ํ ์ ๊ทผ์ ์๋์ ๊ฐ๋ค
- ์ผ๋จ ํน์ ์ซ์๊ฐ ์ฃผ์ด์ก์ ๋ ๊ทธ ์ซ์๋ฒ์งธ๋ก ๋์ค๋ ๋ฌธ์๊ฐ ๋ฌด์์ธ์ง ๊ตฌํ๋ ํจ์๋ฅผ ์ ์ํด์ผํ๋ค. ( ๋ฌธ์ ์งํ ์ ํ์ )
- ๋ฐ๋๋ก ํน์ ๋ฌธ์๊ฐ ์ฃผ์ด์ก์ ๋ ์ด ๋ฌธ์๋ ์ฌ์ ์์ ๋ช๋ฒ์งธ๋ก ๋์ค๋์ง ๊ตฌํ๋ ํจ์๋ฅผ ์ ์ํด์ผํ๋ค. ( ๋ฌธ์ ์งํ ์ ํ์ )
- bans ๋ฅผ ๊ธธ์ด๊ฐ ์งง์์์ผ๋ก, ์ฌ์ ์์ผ๋ก ์ ๋ ฌํ๋ค.
- bansArr ๋ฅผ ๋ง๋ ๋ค ( bansArr[i] = bans[i] ๋ฌธ์์ด์ด ๋ช๋ฒ์งธ๋ก ๋์ค๋์ง )
- bansArr๋ฅผ ์์ฐจ์ ์ผ๋ก ์ํํ๋ฉด์ bansArr[i] <=n ์ผ ์ n+=1 ์ ํ๋ค.
- ์์ ๊ฐ์ด ํ๋ฉด ์ฐ๋ฆฌ๊ฐ ์ฐพ์ ์ฌ์ ์ ์ง์ง n๋ฒ์งธ๋ฅผ ๊ตฌํ ์ ์๊ณ ์ด์ ๊ทธ n์ ๋ฐํ์ผ๋ก ๋ฌธ์์ด์ ๊ตฌํ๋ฉด ๋๋ค
๋ด๊ฐ ์ฒ์์ผ๋ก ํฉ๊ฒฉ๋ฐ์ ์ฝ๋์ด๋ค. dictionary ๋ผ๋ ๊ฐ์ฒด ์ด์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฏธ๊ด์ ๋ณด๊ธฐ ์ข์ง ์๋ค. ๊ทธ๋์ ์๋ ์ฝ๋๋ฅผ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ํธ๋ ๋ฐฉ๋ฒ์ ๊ณ ๋ฏผํ๋ค.
๐จ์ฒซ๋ฒ์งธํ์ด
// https://school.programmers.co.kr/learn/courses/30/lessons/389481
let strToIndex = (str) => {
const dictionary = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5,
f: 6,
g: 7,
h: 8,
i: 9,
j: 10,
k: 11,
l: 12,
m: 13,
n: 14,
o: 15,
p: 16,
q: 17,
r: 18,
s: 19,
t: 20,
u: 21,
v: 22,
w: 23,
x: 24,
y: 25,
z: 26,
};
let num = 0;
for (let i = 0; i < str.length; ++i) {
num = 26 * num + dictionary[str[i]];
}
return num;
};
let indexToStr = (index) => {
const dictionary = {
0: "a",
1: "b",
2: "c",
3: "d",
4: "e",
5: "f",
6: "g",
7: "h",
8: "i",
9: "j",
10: "k",
11: "l",
12: "m",
13: "n",
14: "o",
15: "p",
16: "q",
17: "r",
18: "s",
19: "t",
20: "u",
21: "v",
22: "w",
23: "x",
24: "y",
25: "z",
};
let str = "";
while (index > 0) {
let remain = (index - 1) % 26;
str = dictionary[remain] + str;
index = Math.floor((index - 1) / 26);
}
return str;
};
function solution(n, bans) {
bans = bans.sort((a, b) => {
let aIndex = strToIndex(a);
let bIndex = strToIndex(b);
return aIndex - bIndex;
});
let bansArr = [];
bans.forEach((str) => {
let num = strToIndex(str);
bansArr.push(num);
});
let targetN = n;
for (let i = 0; i < bansArr.length; ++i) {
if (bansArr[i] <= targetN) {
targetN = targetN + 1;
}
}
let answer = indexToStr(targetN);
return answer;
}
๐จ๋๋ฒ์งธํ์ด
์ฒซ๋ฒ์งธ ํ์ด์ ๋ฌ๋ฆฌ ๊ตณ์ด dictionary๋ผ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ์ง ์์๋ ๋ฌธ์ ๋ฅผ ํ ์ ์๋๋ก ๊ตฌํํ์๋ค. ๋์ utf16 ๊ธฐ์ค ๋ฌธ์์ ์ฝ๋ํ์์ a๋ 97, b๋ 98 ... ์์ ์ด์ฉํ์๊ณ ์ด๋ฅผ ์ด์ฉํ๊ธฐ ์ํด ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฅ ๋ฉ์๋์ธ String.fromCharCode ์ String.charCodeAt(i) ์ ์ด์ฉํ์๋ค.
let strToIndex = (str) => {
let num = 0;
for (let i = 0; i < str.length; ++i) {
num = 26 * num + (str[i].charCodeAt(0) - 96);
}
return num;
};
let indexToStr = (index) => {
let str = "";
while (index > 0) {
let remain = (index - 1) % 26;
str = String.fromCharCode(remain + 97) + str;
index = Math.floor((index - 1) / 26);
}
return str;
};
function solution(n, bans) {
bans = bans.sort((a, b) => {
let aIndex = strToIndex(a);
let bIndex = strToIndex(b);
return aIndex - bIndex;
});
let bansArr = [];
bans.forEach((str) => {
let num = strToIndex(str);
bansArr.push(num);
});
let targetN = n;
for (let i = 0; i < bansArr.length; ++i) {
if (bansArr[i] <= targetN) {
targetN = targetN + 1;
}
}
let answer = indexToStr(targetN);
return answer;
}
๐งฉ์ฐธ๊ณ
๐จcharCodeAt
๋ฌธ์์ด์์ ํน์ index์ ๋ฌธ์์ ์ฝ๋ ํฌ์ธํธ๋ฅผ ๋ฐํํฉ๋๋ค. ( utf16 ๊ธฐ์ค ) ๋ง์ฝ "ABC".charCodeAt(1) ์ด์๋ค๋ฉด 66์ด ๋ฐํ ๋์์ ๊ฒ์ด๋ค.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/charCodeAt
String.prototype.charCodeAt() - JavaScript | MDN
String ๊ฐ์ charCodeAt() ๋ฉ์๋๋ ์ฃผ์ด์ง ์ธ๋ฑ์ค์ UTF-16 ์ฝ๋ ๋จ์๋ฅผ ํํํ๋ 0๊ณผ 65535 ์ฌ์ด์ ์ ์๋ฅผ ๋ฐํํฉ๋๋ค.
developer.mozilla.org
๐จString.fromCharCode
์ ๋ ฅ๋ฐ์ ์ฝ๋ ํฌ์ธํธ ( utf16 ๊ธฐ์ค ) ์ ๋ง๋ ๋ฌธ์๋ฅผ ๋ฐํํฉ๋๋ค. ์ํ์ค๋ก ์ ๋ ฅ์ ์ค ์ ์๋ค.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode
String.fromCharCode() - JavaScript | MDN
String.fromCharCode() ๋ฉ์๋๋ UTF-16 ์ฝ๋ ์ ๋์ ์ํ์ค๋ก๋ถํฐ ๋ฌธ์์ด์ ์์ฑํด ๋ฐํํฉ๋๋ค.
developer.mozilla.org
๐จlocaleCompare
์ด๋ฒ์ ์๊ฒ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ด์ฅ๋ฉ์๋ ์ด๋ค. ์๋ ์์๋ฅผ ๋ณด๋ฉด ํ๋ฒ์ ์ดํด๋ ๊ฒ์ด๋ค.
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/String/localeCompare
String.prototype.localeCompare() - JavaScript | MDN
localeCompare() ๋ฉ์๋๋ ์ฐธ์กฐ ๋ฌธ์์ด์ด ์ ๋ ฌ ์์ผ๋ก ์ง์ ๋ ๋ฌธ์์ด ์ ํน์ ๋ค์ ์ค๋์ง ๋๋ ๋์ผํ ๋ฌธ์์ด์ธ์ง ๋ํ๋ด๋ ์์น๋ฅผ ๋ฐํํฉ๋๋ค.
developer.mozilla.org
'๐Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฐฑ์ค[JS] > 1697๋ฒ ์จ๋ฐ๊ผญ์ง (0) | 2025.03.09 |
---|---|
10์ง์ <-> 16์ง์ ๋ณํ ์๊ณ ๋ฆฌ์ฆ (0) | 2025.03.08 |
๋ฐฑ์ค[JS] > 13305๋ฒ ์ฃผ์ ์ (0) | 2025.03.08 |
๋ฐฑ์ค[JS] > 1244๋ฒ ์ค์์น ์ผ๊ณ ๋๊ธฐ (0) | 2025.03.06 |
๋ฐฑ์ค[JS] > 23971๋ฒ ZOAC 4 (0) | 2025.03.06 |