๐พ๋ค์ด๊ฐ๋ฉฐ
- ํ๋ก๊ทธ๋๋จธ์ค ์ฝ๋ฉํ ์คํธ > 2024 KAKAO WINTER INTERNSHIP > ๊ฐ์ฅ ๋ง์ด ๋ฐ์ ์ ๋ฌผ
๋ฌธ์ : ์ด๋ฒ ๋ฌ์ ์ ๋ฌผ ๊ธฐ๋ก์ ๋ฐํ์ผ๋ก ๋ค์ ๋ฌ์ ์ ๋ฌผ์ ๋๊ฐ ๋ง์ด ๋ฐ์์ง ์์ธกํ๊ธฐ
์กฐ๊ฑด
- ๋ ์ฌ๋์ด ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ๊ธฐ๋ก์ด ์๋ค๋ฉด, ์ด๋ฒ ๋ฌ๊น์ง ๋ ์ฌ๋ ์ฌ์ด์ ๋ ๋ง์ ์ ๋ฌผ์ ์ค ์ฌ๋์ด ๋ค์ ๋ฌ์ ์ ๋ฌผ์ ํ๋ ๋ฐ์ต๋๋ค.
- ๋ ์ฌ๋์ด ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ ๊ธฐ๋ก์ด ํ๋๋ ์๊ฑฐ๋ ์ฃผ๊ณ ๋ฐ์ ์๊ฐ ๊ฐ๋ค๋ฉด, ์ ๋ฌผ ์ง์๊ฐ ๋ ํฐ ์ฌ๋์ด ์ ๋ฌผ ์ง์๊ฐ ๋ ์์ ์ฌ๋์๊ฒ ์ ๋ฌผ์ ํ๋ ๋ฐ์ต๋๋ค.
- ์ ๋ฌผ ์ง์๋ ์ด๋ฒ ๋ฌ๊น์ง ์์ ์ด ์น๊ตฌ๋ค์๊ฒ ์ค ์ ๋ฌผ์ ์์์ ๋ฐ์ ์ ๋ฌผ์ ์๋ฅผ ๋บ ๊ฐ์ ๋๋ค.
- ๋ง์ฝ ๋ ์ฌ๋์ ์ ๋ฌผ ์ง์๋ ๊ฐ๋ค๋ฉด ๋ค์ ๋ฌ์ ์ ๋ฌผ์ ์ฃผ๊ณ ๋ฐ์ง ์์ต๋๋ค.
์ ๋ ฅ
- ์น๊ตฌ๋ค์ ์ด๋ฆ์ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด friends
- ์ด๋ฒ ๋ฌ๊น์ง ์น๊ตฌ๋ค์ด ์ฃผ๊ณ ๋ฐ์ ์ ๋ฌผ ๊ธฐ๋ก์ ๋ด์ 1์ฐจ์ ๋ฌธ์์ด ๋ฐฐ์ด gifts
์ถ๋ ฅ
- ๋ค์๋ฌ์ ๊ฐ์ฅ ๋ง์ ์ ๋ฌผ์ ๋ฐ๋ ์น๊ตฌ๊ฐ ๋ฐ์ ์ ๋ฌผ์ ์
โจ๋ณธ๊ฒฉ์ ์ผ๋ก
๋ด๊ฐ ์ด ์ฝ๋
function solution(friends, gifts) {
const graph = {};
const index= {};
const next = {};
//init graph
friends.forEach((f,i)=>{
graph[f] = {}
friends.forEach((fi,i)=>{
if(fi != f) graph[f][fi] = gifts.filter(ig => (ig.split(" ")[0] === f) && fi === ig.split(" ")[1]).length;
})
})
//distance
friends.forEach((f,i)=>{
next[f] = 0;
gifts.forEach((gift, k)=>{
const g = gift.split(" ");
const receive = gifts.filter(ig => ig.split(" ")[0] === f).length;
const give = gifts.filter(ig => ig.split(" ")[1] === f).length;
index[f] = receive - give;
})
})
//next month
friends.forEach((f, i)=>{
friends.forEach((fi, ii)=>{
const g = graph[f][fi];
const r = graph[fi][f];
if((!!g || !!r) && g > r) next[f]++;
if(g === r && index[f] > index[fi]) next[f]++;
})
})
const value = Object.values(next);
return Math.max(...value);
}
๊ฒฐ๊ณผ: ํ ์คํธ๋ ํต๊ณผ... ์คํจ๋ ๋ชจ๋ `์๊ฐ ์ด๊ณผ`
์ค์ค๋ก ์๊ฐํ ์ด์ ๋ ์ค์ฒฉ ๋ฐ๋ณต์ ๋ฌธ์ ๋ก ๋ณด์์ต๋๋ค. ์ฌ์ง์ด ๊ทธ ์์์ filter๊น์ง ์ฐ๊ณ ์์ด์ 3๋ฒ ์ค์ฒฉ์ด๋ผ๊ณ ๋ด์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ... ChatGPT์ผ ๋ด ์ฝ๋๋ฅผ ๋ถ์ํด์ค.
- ์ ๋ฌผ ์ฃผ๊ณ ๋ฐ์ ํ์ ๊ณ์ฐ:
- gifts ๋ฐฐ์ด์ ์ฌ๋ฌ ๋ฒ ์ํํ์ฌ filter๋ฅผ ์ฌ์ฉํ๋ ๋์ , ๋จ์ผ ์ํ๋ก ์ ๋ฌผ ์ฃผ๊ณ ๋ฐ์ ํ์๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋๊ณ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ ๋๋ค.
- ์ ๋ฌผ ์ง์ ๊ณ์ฐ:
- ์ ๋ฌผ ์ฃผ๊ณ ๋ฐ์ ํ์๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋์ผ๋ฉด, ์ ๋ฌผ ์ง์๋ ๋น ๋ฅด๊ฒ ๊ณ์ฐํ ์ ์์ต๋๋ค.
- ๋ค์ ๋ฌ ์ ๋ฌผ ๋ฐ์ ํ์ ๊ณ์ฐ:
- ์ ๋ฌผ ์ฃผ๊ณ ๋ฐ์ ํ์์ ์ ๋ฌผ ์ง์๋ฅผ ๋ฏธ๋ฆฌ ๊ณ์ฐํด๋๋ฉด, ์ด ๊ฐ์ ์ด์ฉํด ํ ๋ฒ์ ๋น๊ตํ๊ณ ๊ณ์ฐํ ์ ์์ต๋๋ค.
์.. ์ต์ ํํ ์ฝ๋๊น์ง ๋์ ๋ณด๊ณ ๋ง์์ต๋๋ค. ๋ค์๋ถํด ํฌ์ธํธ๋ง ๋ฐ์์ ์ง์ ๊ณ ์ณ๋ณด๊ฒ ์ต๋๋ค.
๋จผ์ `graph`์ ๋๋ค.
//init graph
friends.forEach((f,i)=>{
graph[f] = {}
friends.forEach((fi,i)=>{
if(fi != f) graph[f][fi] = gifts.filter(ig => (ig.split(" ")[0] === f) && fi === ig.split(" ")[1]).length;
})
})
์ฒ์์ ์ฌ์ค ๋ฌธ์ ์ดํด๊ฐ ์ ๋์ง ์์์ ์ ์ถ๋ ฅ ์์์ ๋ํ ์ค๋ช ์์ ํ์ฒ๋ผ ๋์จ ๊ฒ์ ๊ทธ๋๋ก ๊ทธ๋ ค๋ณด๋ ค๊ณ ํ๋ ๊ฒ์ด ํฐ ํ ์ด์์ต๋๋ค. ์ค์ง์ ์ผ๋ก ๊ทธ๋ํ๋ ๋ง์ง๋ง์ ๋น๊ตํ๊ธฐ ์ํด ์ฌ์ฉํ ๋ฟ์ธ๋ฐ ๋๋ฌด ๋ง์ ์๊ฐ์ ๊ทธ๋ํ๋ฅผ ๊ทธ๋ฆฌ๋ ๋ฐ ํ ์ ํ๊ณ ์์์ต๋๋ค. ๋ฌธ์ ์์ ์ค์ง์ ์ผ๋ก ์ค์ํ ์์๋ `๋๊ตฌ`๊ฐ ์๋ `ํ์`์ ๋๋ค.
๐graph ์ญ์ !
๋ฐ๋ผ์ `index`์ ๋๋ค.
//distance
friends.forEach((f,i)=>{
next[f] = 0;
gifts.forEach((gift, k)=>{
const g = gift.split(" ");
const receive = gifts.filter(ig => ig.split(" ")[0] === f).length;
const give = gifts.filter(ig => ig.split(" ")[1] === f).length;
index[f] = receive - give;
})
})
์ฌ๊ธฐ์์๋ 3์ค์ฒฉ์ ๋๋ค... ๋ฐ๋ก๋ฐ๋ก receive์ give์ ํ์๋ฅผ ๋ง๋ค๊ณ ์์ต๋๋ค. ์ฌ์ง์ด 2๋ฒ์งธ ์ค์ฒฉ์ ํ์๊ฐ ์์ต๋๋ค.
//distance
friends.forEach((f,i)=>{
next[f] = 0;
const receive = gifts.filter(ig => ig.split(" ")[0] === f).length;
const give = gifts.filter(ig => ig.split(" ")[1] === f).length;
index[f] = receive - give;
})
๊ทธ๋๋ ์์ง ์ค์ฒฉ ๋ฐ๋ณต์ ๋๋ค. filter๋ฅผ ํ์คํ ์์ ๊ธฐ ์ํด receive์ give๋ฅผ ๋ณ๋๋ก ์ ์ธํด ์ฃผ์ด์ผ ๊ฒ ์ต๋๋ค. ๋ํ ์ด๊ธฐํ ๋ถ๋ถ์ ๋ณ๋๋ก ๋นผ์ฃผ์์ต๋๋ค.
๐ `receive`, `give` ๋ณ๋ ์ ์ธ, ์ด๊ธฐํ ๋ถ๋ฆฌ
const index= {};
const next = {};
const receive = {};
const give = {};
//init graph
friends.forEach((f,i)=>{
next[f] = 0;
receive[f] = 0;
give[f] = 0;
})
//distance
gifts.forEach((gift, k)=>{
const g = gift.split(" ");
receive[g[1]]++;
give[g[0]]++;
})
์ค์ฒฉ ๋ฐ๋ณต์ด ์ฌ๋ผ์ก๋ค...!
๊ทธ๋ฆฌ๊ณ `graph`๋ฅผ ๋์ฒดํด์ค๋๋ค.
//next month
friends.forEach((f, i)=>{
friends.forEach((fi, ii)=>{
const g = graph[f][fi];
const r = graph[fi][f];
if((!!g || !!r) && g > r) next[f]++;
if(g === r && index[f] > index[fi]) next[f]++;
})
})
๊ธฐ์กด์ ๊ทธ๋ํ๊ฐ ์ฐ์ธ ๋ถ๋ถ์
๋๋ค. ์ด ๋ถ๋ถ์ GPT์ ์ฝ๋๋ฅผ ๋น๋ ค์์ต๋๋ค(์ฌ์ค ์ ์ฒด ๋ค ๋น๋ ค์๋ค..) ๋ฐ๋ก filter๋ฅผ ์ฌ์ฉํด ๋ค์๊ณผ ๊ฐ์ด ๋ฐ๊พธ์์ต๋๋ค. ๊ณ์ split์ ์ฌ์ฉํด์ ์
๋ ฅ๋ฐ์ ๊ฒ์ ๋ฐ๊ฟ์ผ์ง๋ง ์๊ฐํ๋ค๊ฐ ์
๋ ฅ๋ฐ์ ๊ทธ๋๋ก๋ฅผ ๋น๊ตํ๋ ค๋ ์๊ฐ์ ๋ชปํ ๊ฒ ๊ฐ์ต๋๋ค.
๐ ์ ๋ ฅ๋ฐ์ ๋๋ก ๋น๊ต
//next month
friends.forEach((f, i)=>{
friends.forEach((fi, ii)=>{
const g = gifts.filter(gift => gift === `${f} ${fi}`).length;
const r = gifts.filter(gift => gift === `${fi} ${f}`).length;
if((g || r) && g > r) next[f]++;
if(g === r && index[f] > index[fi]) next[f]++;
})
})
โ๏ธ๊ฒฐ๋ก
์ค๋๋ง์ ์ฝ๋ฉํ ์คํธ๋ฅผ ํ๋ค๋ณด๋ ๋ฌธ์ ์ดํด๋ถํฐ ๋์ด๋๊ฐ ์์๊ณ , ์ ํํ ์ด๋ค ๊ฒ์ ๋ณ์๋ก ์ ์ธํด์ผ ํ๋์ง๋ ์ ๋จน์๋ ๋ฌธ์ ์์ต๋๋ค. ์ฝ๋ฉํ ์คํธ๋ ๊พธ์คํ ํ์ด์ผ ๊ฒ ์ต๋๋ค. ์ค์ฒฉ ๋ฐ๋ณต์ ์ฌ์ฉํ๋ค๋ฉด ๋๋ฌด ๋ณต์กํ๊ฒ ์๊ฐํ๋ ๊ฒ์ด ์๋์ง ๊ณ์ ์์ฌํด๋ณด๊ธฐ๋ ํด์ผ๊ฒ ์ต๋๋ค.
์ต์ข ์ฝ๋
function solution(friends, gifts) {
const index= {};
const next = {};
const receive = {};
const give = {};
//init graph
friends.forEach((f,i)=>{
next[f] = 0;
receive[f] = 0;
give[f] = 0;
})
//distance
gifts.forEach((gift, k)=>{
const g = gift.split(" ");
receive[g[1]]++;
give[g[0]]++;
})
friends.forEach(f => {
index[f] = give[f] - receive[f];
});
//next month
friends.forEach((f, i)=>{
friends.forEach((fi, ii)=>{
const g = gifts.filter(gift => gift === `${f} ${fi}`).length;
const r = gifts.filter(gift => gift === `${fi} ${f}`).length;
if((g || r) && g > r) next[f]++;
if(g === r && index[f] > index[fi]) next[f]++;
})
})
const value = Object.values(next);
return Math.max(...value);
}
'Create' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Matter.js] What's the matter??? (1) | 2024.06.11 |
---|---|
[์๊ณ ๋ฆฌ์ฆ] ์ด๊ฒ ๋๋ค...? (1) | 2024.06.03 |
[React] ์ ๋ฐ์ํ ํ ์คํธ๋ฐ์ค๋ ์คํ์ผ๋ก ๋ง๋๋๊ฐ? (0) | 2024.05.11 |
[React] ๋ฆฌํฉํ ๋ง - ๋ฐ์ดํฐ/์ก์ /๊ณ์ฐ์ผ๋ก ๋ถ๋ฆฌํ๊ณ ์ฟผ๋ฆฌ ์คํธ๋ง์ ์ฌ์ฉํ์ (0) | 2024.05.08 |
[React] ์ปดํฌ๋ํธ๋ ํ ๋ฒ์ ํ๋์ ์ฑ ์๋ง ์ง๋ค. (0) | 2024.05.05 |