[Lv1] ํฐ์ผ๋ชฌ
function solution(nums) {
const map=new Map();
//ํฐ์ผ๋ชฌ ์ข
๋ฅ ๊ตฌํ๊ธฐ
for(const num of nums){
map.set(num,map.get(num)+1||1)
}
const type=map.size
return Math.min(type,Math.floor(nums.length/2));
}
์ต๋ํ ๋ค์ํ ์ข ๋ฅ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ ธ๊ฐ๊ธธ ์ํ๊ณ , nums/2๋งํผ์ ํฐ์ผ๋ชฌ์ ๊ฐ์ ธ๊ฐ ์ ์๊ธฐ ๋๋ฌธ์ ํฐ์ผ๋ชฌ ์ข ๋ฅ์ ์์ nums/2์ค ์ต์๊ฐ์ ๋ฆฌํดํด์ฃผ๋ฉด ๋๋ค.
๐ Refactor
function solution(nums) {
//ํฐ์ผ๋ชฌ ์ข
๋ฅ ๊ตฌํ๊ธฐ
const set=new Set(nums);
const type=set.size;
return Math.min(type,Math.floor(nums.length/2));
}
์ค๋ณต๋๋ ์์๋ค์ ์ฒ๋ฆฌํ๊ธฐ๋๋ฌธ์, set์ ์ฌ์ฉํ๋ฉด ์ข ๋ ๊ฐ๊ฒฐํ๋ค.
[Lv1] ์์ฃผํ์ง ๋ชปํ ์ ์
function solution(participant, completion) {
const map=new Map();
//participant map ์์ฑ
for(const p of participant){
if(!map.has(p)){
map.set(p,1)
}else {
map.set(p,map.get(p)+1)
}
}
//์ํํ๋ฉด์ ์์ฃผ์ ์ ๊ฑฐํ๊ธฐ
for(const c of completion){
if(map.get(c)===1){
map.delete(c);
}else {
map.set(c,map.get(c)-1)
}
}
return map.keys().next().value
}
๊ฐ๋จํ๊ฒ ์ฐธ๊ฐ์ ๊ธฐ์ค์ผ๋ก ์ด๋ฆ๋ณ ์ฐธ์ฌ์์๋ก map์ ์์ฑํ๊ณ ์์ฃผํ ์ ์๋ค์ ์ ๊ฑฐํ๋์์ผ๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๋ค.
์์ฃผํ์ง ๋ชปํ ์ฐธ๊ฐ์๋ ๋ฌด์กฐ๊ฑด 1๋ช ์ด๊ธฐ ๋๋ฌธ์, ์ฒซ๋ฒ์งธ key๋ฅผ ์ถ์ถํ๊ธฐ ์ํด keys().next().value๋ฅผ ์ฌ์ฉํ๋ค.
๐ Refactor
function solution(participant, completion) {
const map = new Map();
// completion ์ ์๋ค์ ํด์๋งต์ ์ถ๊ฐ
for(const name of completion){
map.set(name, map.has(name) ? map.get(name) + 1 : 1);
}
//participant ์ ์๋ค์ ํด์๋งต์์ ํ์ธ
for(const name of participant){
if(!map.has(name) || map.get(name)===0){
return name;
}else {
map.set(name, map.get(name) - 1);
}
}
}
๋ฐ๋ก lenght๊ฐ 1์ธ key๊ฐ๋ง ๋ฆฌํดํ๋ฉด ๋๊ธฐ ๋๋ฌธ์, ๋ฐ๋๋ก ์์ฃผ์์ map์ ์์ฑํ๊ณ , ์ฐธ๊ฐ์๋ฅผ ํ์ธํ๋ฉด์
has์ ์นด์ดํธ๊ฐ 0์ธ ์กฐ๊ฑด์ผ๋ก ๊ฑธ๋ฌ๋ด์, name์ ๋ฆฌํดํ๋ ๋ฐฉ์์ด๋ค.
[Lv2] ์ ํ๋ฒํธ ๋ชฉ๋ก
function solution(phone_book) {
phone_book.sort()
for(let i=0;i<phone_book.length;i++){
for(let j=i+1;j<phone_book.length;j++){
if(phone_book[j].includes(phone_book[i])){
return false
}
}
}
return true;
}
๊ตณ์ด map,set์ ์ธ ์ด์ ๊ฐ ์์ ๊ฒ๊ฐ์ array๋ก ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์๊ณ , ์ด๋ฐฉ์์ O(n^2)๋ก ์ญ์๋ ์๊ฐ์ด๊ณผ๊ฐ ๋ฐ์ํ์๋ค.
function solution(phone_book) {
phone_book.sort();
for(let i=0;i<phone_book.length-1;i++){
let prefix=phone_book[i];
let next=phone_book[i+1];
if(prefix===next.substring(0, prefix.length)){
return false;
}
continue;
}
return true;
}
์ด๋ค ๋ฒํธ๊ฐ ๋ค๋ฅธ๋ฒํธ์ ์ ๋์ด์ด๊ธฐ๋๋ฌธ์, ์ ํ๋ฒํธ ๋ชฉ๋ก์ ์ํํ๋ฉด์ ์ ๋ ฌ์ ํด๋์ ์ํ์ด๊ธฐ๋๋ฌธ์ ๋ฌด์กฐ๊ฑด ์ ๋์ด๊ฐ ์กด์ฌํ๋ค๋ฉด ๋ฐ๋ก ๋ค์ ์์๊ฐ ํด๋น๋๋์ง ํ์ธ์ ํ๋ฉด๋๋ค. ๋ค์์ ๊ฑด๋๋ฐ๊ณ ๋ค๋ค์์ ๋ถ๊ฐ๋ฅํ๋ค!
๊ทธ๋์ substring์ผ๋ก prefix ๊ธธ์ด๋งํผ ํ์ธํด์ ๊ฐ๋ค๋ฉด ๋ฆฌํดํด์ฃผ๊ณ , ๊ฐ์ง ์๋ค๋ฉด ๋ ์ํํ๋ฉด์ ํ์ธํด๋ณผ ํ์๋ ์๊ธฐ๋๋ฌธ์ continue๋ฅผ ์ฌ์ฉํ๋๋ฐ ์๊ฐํด๋ณด๋ continue์ ๋ฌด๊ดํ๊ฒ ๋์ํ๋ค
๐ Refactor
function solution(phone_book) {
return !phone_book.sort().some((v, i) => {
if (i === phone_book.length - 1) return false; //๋ง์ง๋ง ์์
return phone_book[i + 1].startsWith(v); //์ ๋์ด ๋ง์กฑํ๋ค๋ฉด,true
});
}
sortํ๊ณ some๋ฉ์๋๋ก ํ๋๋ผ๋ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ฉด ๋ฐ๋ก true๋ฅผ ๋ฆฌํดํ๊ณ ์ํํ์ง ์๋๋ค.
๋ฐ๋๋ก ๋ฆฌํดํด์ผํ๊ธฐ๋๋ฌธ์ !์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด์ฃผ๊ณ , startsWith๋ฉ์๋๋ก ์ ๋์ด ์กฐ๊ฑด์ ํ์ธํด์ค๋ค.
โ startWith() :boolean
ํน์ ๋ฌธ์์ด๋ก ์์ํ๋์ง ๊ฒฐ๊ณผ๋ฅผ boolean์ผ๋ก ๋ฆฌํดํ๋ค.
[Lv2] ์์
function solution(clothes) {
let answer = 1;
//์์์ข
๋ฅ์ ๋ฐ๋ฅธ count map ์์ฑ
const map=new Map();
for(const [name,type] of clothes){
map.set(type,map.get(type)+1||1)
}
//๊ฐ ์ข
๋ฅ๋ณ ๊ฒฝ์ฐ์ ์ ๊ตฌํ๊ธฐ
for(const values of map.values()){
answer*=values+1;
}
return answer-1;
}
๊ฐ ์์์ข ๋ฅ์ ๋ฐ๋ฅธ ์ฝ๋์ ๊ฒฝ์ฐ์ ์๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๊ธฐ ๋๋ฌธ์, ๊ฐ ์์์ข ๋ฅ์ ๋ํ ์นด์ดํธ map์ ์์ฑํ๊ณ , ์ฐฉ์ฉํ์ง ์๋ ๊ฒฝ์ฐ๋ฅผ ํฌํจํด์ +1ํ ์ํ๋ก ๊ณฑํด์ฃผ๋ฉด๋๋ค. ๋ฆฌํดํ ๋ ์์ ๋ชจ๋ ์์์ ์ฐฉ์ฉํ์ง ์์ ๊ฒฝ์ฐ๋ ์ ์ธํด์ผํ๋ฏ๋ก -1์ ๋บ๋ค.
[Lv3] ๋ฒ ์คํธ ์จ๋ฒ
function solution(genres, plays) {
var answer = [];
//[ [ 'pop', 3100 ], [ 'classic', 1450 ] ]
//์ฅ๋ฅด๋ณ ์ฌ์ํ์ obj
const obj={}; //{ classic: 1450, pop: 3100 }
for(let i=0;i<genres.length;i++){
const genre=genres[i];
const playCount=plays[i];
if(!obj[genre]){
obj[genre]=playCount
}else {
obj[genre]+=playCount
}
}
//obj Array๋ก ๋ณ๊ฒฝ
const genreArray=Object.entries(obj);
genreArray.sort((a,b)=>b[1]-a[1])
//play, genre, index๊ฐ์ฒด์ array์์ฑ
const infoArray=genres.map((genre,index)=>({
genre:genre,
playCount:plays[index],
index:index
}))
//์ฅ๋ฅด๋ณ ์ํํ๋ฉด์ 2๊ฐ์ฉ ๋ฝ๊ธฐ
genreArray.forEach((array,i)=>{
let current=[];
for(const info of infoArray){
if(array[0]===info.genre){
current.push(info);
}
}
//playCount ๋ด๋ฆผ์ฐจ์ ์ ๋ ฌ
current.sort((a,b)=>b.playCount - a.playCount);
current.forEach((v, i) => {
if (i < 2) {
answer.push(v.index);
}
});
})
return answer;
}
์ฅ๋ฅด๋ณ ์ฌ์ํ์๋ฅผ ์นด์ดํธํ๊ณ ๋ด๋ฆผ์ฐจ์์ผ๋ก ์ ๋ ฌํด์ผํ๋ฏ๋ก, ๊ฐ์ฒด๋ก ๋จผ์ ๋ง๋ค๊ณ ๋ฐฐ์ด๋ก ๋ณ๊ฒฝํด์ค์ผํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ชจ๋ ์ ๋ณด๋ฅผ ๊ฐ์ง ๊ฐ์ฒด๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ , ์ฌ์ํ์ ์์ผ๋ก ์ ๋ ฌํ๋ค ๊ฐ ์ฅ๋ฅด๋ณ ๋๊ฐ์ฉ ๋ฝ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฆฌํดํด์ผํ๋ฏ๋ก
infoArray๋ฅผ ์ํํ๋ฉด์ ์ฅ๋ฅด๋ฅผ ๊ธฐ์ค์ผ๋ก current ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค ์ฌ์ํ์์์ผ๋ก ์ ๋ ฌํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
//current
[
{ genre: 'pop', playCount: 2500, index: 4 },
{ genre: 'pop', playCount: 600, index: 1 }
]
[
{ genre: 'classic', playCount: 800, index: 3 },
{ genre: 'classic', playCount: 500, index: 0 },
{ genre: 'classic', playCount: 150, index: 2 }
]
๊ทธ๋ฆฌ๊ณ ์ต์ข ์ ์ผ๋ก current ๋ฐฐ์ด์ ์ํํ๋ฉด์ ๋๊ฐ์ฉ ๋ฝ์ result ๋ฐฐ์ด์ ๋ฃ์ด์ค๋ค.
'ํ๋ก๊ทธ๋๋จธ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ์ ํ๋ฒํธ ๋ชฉ๋ก (0) | 2024.07.26 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] JadenCase ๋ฌธ์์ด ๋ง๋ค๊ธฐ (0) | 2024.07.25 |
[ํ๋ก๊ทธ๋๋จธ์ค] ๋ฌธ์์ด ๋ด ๋ง์๋๋ก ์ ๋ ฌํ๊ธฐ (0) | 2024.07.24 |
[ํ๋ก๊ทธ๋๋จธ์ค] n^2 ๋ฐฐ์ด ์๋ฅด๊ธฐ (0) | 2024.07.23 |
[์คํ&ํ] ํ๋ก๊ทธ๋๋จธ์ค ์๊ณ ๋ฆฌ์ฆ Kit ๋ฌธ์ ํ์ด (JS) (0) | 2024.04.06 |