๐ ๋ฌธ์
[๋ณธ ๋ฌธ์ ๋ ์ ํ์ฑ๊ณผ ํจ์จ์ฑ ํ
์คํธ ๊ฐ๊ฐ ์ ์๊ฐ ์๋ ๋ฌธ์ ์
๋๋ค.]
"์ค๋
ธ์ฐํ์ด"์์ ํธํ
์ ์ด์ํ๊ณ ์๋ "์ค์นดํผ"๋ ํธํ
์ ํฌ์ํ๋ ค๋ ๊ณ ๊ฐ๋ค์๊ฒ ๋ฐฉ์ ๋ฐฐ์ ํ๋ ค ํฉ๋๋ค. ํธํ
์๋ ๋ฐฉ์ด ์ด k๊ฐ ์์ผ๋ฉฐ, ๊ฐ๊ฐ์ ๋ฐฉ์ 1๋ฒ๋ถํฐ k๋ฒ๊น์ง ๋ฒํธ๋ก ๊ตฌ๋ถํ๊ณ ์์ต๋๋ค. ์ฒ์์๋ ๋ชจ๋ ๋ฐฉ์ด ๋น์ด ์์ผ๋ฉฐ "์ค์นดํผ"๋ ๋ค์๊ณผ ๊ฐ์ ๊ท์น์ ๋ฐ๋ผ ๊ณ ๊ฐ์๊ฒ ๋ฐฉ์ ๋ฐฐ์ ํ๋ ค๊ณ ํฉ๋๋ค.
- ํ ๋ฒ์ ํ ๋ช ์ฉ ์ ์ฒญํ ์์๋๋ก ๋ฐฉ์ ๋ฐฐ์ ํฉ๋๋ค.
- ๊ณ ๊ฐ์ ํฌ์ํ๊ธฐ ์ํ๋ ๋ฐฉ ๋ฒํธ๋ฅผ ์ ์ถํฉ๋๋ค.
- ๊ณ ๊ฐ์ด ์ํ๋ ๋ฐฉ์ด ๋น์ด ์๋ค๋ฉด ์ฆ์ ๋ฐฐ์ ํฉ๋๋ค.
- ๊ณ ๊ฐ์ด ์ํ๋ ๋ฐฉ์ด ์ด๋ฏธ ๋ฐฐ์ ๋์ด ์์ผ๋ฉด ์ํ๋ ๋ฐฉ๋ณด๋ค ๋ฒํธ๊ฐ ํฌ๋ฉด์ ๋น์ด์๋ ๋ฐฉ ์ค ๊ฐ์ฅ ๋ฒํธ๊ฐ ์์ ๋ฐฉ์ ๋ฐฐ์ ํฉ๋๋ค.
์๋ฅผ ๋ค์ด, ๋ฐฉ์ด ์ด 10๊ฐ์ด๊ณ , ๊ณ ๊ฐ๋ค์ด ์ํ๋ ๋ฐฉ ๋ฒํธ๊ฐ ์์๋๋ก [1, 3, 4, 1, 3, 1] ์ผ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ฐฉ์ ๋ฐฐ์ ๋ฐ๊ฒ ๋ฉ๋๋ค.
์ํ๋ ๋ฐฉ ๋ฒํธ ๋ฐฐ์ ๋ ๋ฐฉ ๋ฒํธ
1 | 1 |
3 | 3 |
4 | 4 |
1 | 2 |
3 | 5 |
1 | 6 |
์ ์ฒด ๋ฐฉ ๊ฐ์ k์ ๊ณ ๊ฐ๋ค์ด ์ํ๋ ๋ฐฉ ๋ฒํธ๊ฐ ์์๋๋ก ๋ค์ด์๋ ๋ฐฐ์ด room_number๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๊ฐ ๊ณ ๊ฐ์๊ฒ ๋ฐฐ์ ๋๋ ๋ฐฉ ๋ฒํธ๋ฅผ ์์๋๋ก ๋ฐฐ์ด์ ๋ด์ return ํ๋๋ก solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์.
์ ํ์ฌํญ
- k๋ 1 ์ด์ 10^12 ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- room_number ๋ฐฐ์ด์ ํฌ๊ธฐ๋ 1 ์ด์ 200,000 ์ดํ์ ๋๋ค.
- room_number ๋ฐฐ์ด ๊ฐ ์์๋ค์ ๊ฐ์ 1 ์ด์ k ์ดํ์ธ ์์ฐ์์ ๋๋ค.
- room_number ๋ฐฐ์ด์ ๋ชจ๋ ๊ณ ๊ฐ์ด ๋ฐฉ์ ๋ฐฐ์ ๋ฐ์ ์ ์๋ ๊ฒฝ์ฐ๋ง ์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋๋ค.
- ์๋ฅผ ๋ค์ด, k = 5, room_number = [5, 5] ์ ๊ฐ์ ๊ฒฝ์ฐ๋ ๋ฐฉ์ ๋ฐฐ์ ๋ฐ์ง ๋ชปํ๋ ๊ณ ๊ฐ์ด ๋ฐ์ํ๋ฏ๋ก ์ด๋ฐ ๊ฒฝ์ฐ๋ ์ ๋ ฅ์ผ๋ก ์ฃผ์ด์ง์ง ์์ต๋๋ค.
์ ์ถ๋ ฅ ์
10 | [1,3,4,1,3,1] | [1,3,4,2,5,6] |
โ๏ธ ํ์ด
์ด์ ์ union&find ๋ฌธ์ ๋ฅผ ํ์๋ ๊ธฐ์ต์ด ๋์ ๋น์ทํ ๋ฐฉ๋ฒ์ผ๋ก ํ์ด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
find๋ผ๋ ํจ์๋ฅผ ์์ฑํ๋ค. find๋ ์๋ฃ๊ตฌ์กฐ์ ํด๋น ์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฅ ์์ ์(๋ฐฐ์ ๋์ด ์์ง ์๋ค๋ฉด ํด๋น ์ / ์ด๋ฏธ ๋ฐฐ์ ๋์ด ์๋ค๋ฉด 1์ฉ ์ฆ๊ฐ์ํค๋ฉฐ ๋ค์ ์)๋ฅผ ๋ฐํํ๋ค.
k์ ํฌ๊ธฐ๊ฐ 10^12์ด๊ธฐ ๋๋ฌธ์ ๋ฐฐ์ด์ ์์ฑํ๊ธฐ์๋ ์ด๋ ค์ธ ๊ฒ ๊ฐ์๊ธฐ ๋๋ฌธ์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ์๋ค. ๋ง์ฝ hash๋ผ๋ ๊ฐ์ฒด์ ์ํ๋ ๋ฐฉ ๋ฒํธ๋ฅผ ํค๋ก ๊ฐ์ง๋ ๊ฐ์ด ์๋ค๋ฉด ๋ฐฐ์ ํ ์ ์๋ ๋ฐฉ์ด๋ผ๋ ๋ป์ด๋ฏ๋ก ๋ฐฉ ๋ฒํธ๋ฅผ ๋ฐํํ๊ณ hash ๊ฐ์ฒด์๋ ๋ฐฉ ๋ฒํธ๋ฅผ key๋ก ๋ฐฉ ๋ฒํธ + 1์ ๊ฐ์ผ๋ก ์ ์ฅํ๋ค. ๋ฐฉ ๋ฒํธ + 1์ ํ ๋นํ๋ ์ด์ ๋ ์ดํ์ ๊ฐ์ ์์ ๋ฐฉ์ ์ํ๋ ๊ฒฝ์ฐ ๊ฐ์ฒด์์ ์ฐธ์กฐํ์ฌ ๋ฐํํ์ฃผ๊ธฐ ์ํจ์ด๋ค. hash ๊ฐ์ฒด์์ ์ ์ธ๋ฑ์ค๋ก ํ์ธํ์ ๋ ์กด์ฌํ๋ค๋ฉด ์ด๋ฏธ ๋ฐฐ์ ๋ room์ด๊ธฐ ๋๋ฌธ์ hash[room]์ ์ธ์๋ก find ํจ์๋ฅผ ์ฌ๊ทํธ์ถํ๊ณ ์ด๋ฅผ hash[room]์ ์ ์ฅํ๋ค.
๋ง์ฝ 1๋ฒ๋ฐฉ๋ถํฐ 3๋ฒ๋ฐฉ๊น์ง ๋ชจ๋ ๋ฐฐ์ ์ด ๋์ด์์๋ 1๋ฒ ๋ฐฉ์ ์ํ๋ ๊ฒฝ์ฐ๋ฅผ ์๋ก ๋ค์ด๋ณด์. {1: 2, 2: 3, 3: 4}๋ก hash์ ์ ์ฅ๋์ด ์์ํ ๋ฐ find ํจ์๋ฅผ ํธ์ถํ๋ฉด ์ด๋ฏธ 1๋ฒ๋ฐฉ์ด ๋ฐฐ์ ๋์ด ์๊ธฐ ๋๋ฌธ์ find(hash[1])์ ์ฌ๊ทํธ์ถํ๊ณ ์ดํ๋ก๋ 3๋ฒ๋ฐฉ๊น์ง ๋ฐฐ์ ๋์ด ์์ผ๋ฏ๋ก find(hash[2]), find(hash[3])์ด ํธ์ถ๋์ด hash[4]์ 5๋ฅผ ํ ๋นํ๊ณ 5๋ฅผ ๋ฐํํ๋ค. ์ด๋ ํจ์ ์ปจํ ์คํธ๊ฐ ํ๋์ฉ ์ข ๋ฃ๋๋ฉด์ ๋ง์ง๋ง์ ๋ฐํ๊ฐ์ hash[room]์ ํ ๋นํด ์ต์ ํ๋ฅผ ํด์ค๋ค. 5๊ฐ ๊ณ์ ๋ฐํ๊ฐ์ผ๋ก ์ค๊ธฐ ๋๋ฌธ์ {1: 5, 2: 5, 3: 5, 4:5}๋ก ์ต์ ํ๋๊ณ ์ดํ์ ์ด๋ฏธ ๋ฐฐ์ ๋ ๋ค๋ฅธ ๋ฐฉ์ ์ํ ๋ 5๊น์ง ๋ณด๋ค ๋น ๋ฅด๊ฒ ๋๋ฌํ ์ ์๋ค.
๋ฌธ์ ๋ ์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ์ ๋ ์ ํ์ฑํ ์คํธ๋ ๋ชจ๋ ํ ์คํธ์ผ์ด์ค๋ฅผ ํต๊ณผํ์ง๋ง ํจ์จ์ฑ ํ ์คํธํ๋๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ค. ์ฝ๋์ ๊ฐ์ ์ฌํญ์ ๋์ ํ ์์ ๊ฒ ๊ฐ์๊ณ ์ฌ๊ทํธ์ถ์ด ์๋ while๋ฌธ์ ์ฌ์ฉํ์์๋ ๊ฒฐ๊ณผ๋ ๊ฐ์๋ค. ํน์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํด์ ์ธ๋ฑ์ฑํ๋ ๊ฒ๋ณด๋ค ํจ์จ์ ์ธ ๋ฐฉ๋ฒ์ด ์์๊น๋ผ๋ ๊ฒ์ด์๊ณ ๋์์ผ๋ก๋ Map๊ฐ์ฒด๊ฐ ์์๋ค. ๊ธฐ์กด์ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ์ฝ๋๋ฅผ map์ ๋ฉ์๋ set, get, has๋ฅผ ์ฌ์ฉํด์ ์ ์ถํ๋ ํต๊ณผ๊ฐ ๋ฌ๋ค.
map๋ณด๋ค๋ ๊ฐ์ฒด๊ฐ ๋ ๋น ๋ฅผ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ์ฐจ์ด๋ฅผ ๋ณด๋ ๋ช ๋ฐฐ์ ์ฐจ์ด๊ฐ ๋ฌ๋ค. ๊ฐ์ฒด์ map์ ์ฐจ์ด์ ์ ์ ๋ฆฌํด์ฃผ์ ๋ถ์ ํฌ์คํ ์ ๋ดค๋๋ฐ ๋ค์๊ณผ ๊ฐ์๋ค.
Map | Object | |
key Types | Map์ ์ด๋ ํ ๊ฐ๋ key๋ก ๊ฐ์ง ์ ์๋ค. | Object์ key๋ String ๋๋ Symbol์ด์ด์ผ ํ๋ค. |
key Order | Map์ ์ฝ์ ํ ์์๋๋ก key๊ฐ ์ ๋ ฌ๋์ด ์๋ค. Map์ iterateํ ๊ฒฝ์ฐ ์ฝ์ ๋ ์์๋๋ก ๋์จ๋ค. | Object์ key๋ค์ ํ์ฌ๋ ์์๋๋ก ์ ๋ ฌ๋๊ธฐ๋ ํ์ง๋ง, ํด๋น ์์๋ค์ ํญ์ ๋ณด์ฅ๋๋ ๊ฒ์ ์๋๋ฉฐ Object property ์์์ ์์กดํ์ง ์๋ ๊ฒ์ด ์ข๋ค. |
Iteration | Map ์ ์ดํฐ๋ฌ๋ธํ๋ฉฐ directํ๊ฒ iterate ํ ์ ์๋ค. | Object๋ iteration ํ๋กํ ์ฝ์ ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๋ฐ๋ผ์ direct ํ๊ฒ iterate๋ฅผ ํ ์ ์๋ค. (Object.keys ๋ Object.entries ๋๋ for..in ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ์ผ ํ๋ค) |
performance | ๋น๋ฒํ key-value pair์ ์ฝ์ ๊ณผ ์ญ์ ์ ๋ ๋์ performance๋ฅผ ๊ฐ์ง๋ค. get์์ object์ ๋นํด performance๊ฐ ๋๋ฆฌ๋ค๋ ์ด์ผ๊ธฐ๊ฐ ์๋ค. | key-value pair์ ๋น๋ฒํ ์ถ๊ฐ ๋ฐ ์ญ์ ์ ๋ํ ์ต์ ํ๊ฐ ๋์ด์์ง ์๋ค. |
Serialization and parsing | No native support for serialization or parsing | JSON.stringify() ๋ฐ JSON.parse()๋ฅผ ์ง์ํ๋ค. |
์ถ์ฒ - https://velog.io/@namda-on/JavaScript-Map-%EA%B3%BC-Object-%EC%9D%98-%EC%B0%A8%EC%9D%B4
Map์ด ๋น๋ฒํ key-value pair์ ์ฝ์ ๊ณผ ์ญ์ ์ ๋ ๋์ performance๋ฅผ ๊ฐ์ง๋ค๊ณ ํ๋ค!! Map ์๋ฃ๊ตฌ์กฐ ์ ์ฉํด์ผ๊ฒ ๋น
โจ๏ธ ์ฝ๋
function solution(k, room_number) {
var answer = [];
const hash = new Map();
const find = room => {
if (!hash.has(room)) {
hash.set(room, room + 1);
return room;
} else {
const findRoom = find(hash.get(room));
hash.set(room, findRoom);
return findRoom;
}
};
for (const number of room_number) {
const room = find(number);
answer.push(room);
}
return answer;
}
'Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Algorithm] ์ฌ๋ฐ๋ฅธ ๊ดํธ์ ๊ฐฏ์ (0) | 2023.03.25 |
---|---|
[Algorithm] ๋ฌด์ง์ ๋จน๋ฐฉ ๋ผ์ด๋ธ (0) | 2023.03.24 |
[Algorithm] ํํ ๊ฐ๋ฅํ ์ด์งํธ๋ฆฌ (0) | 2023.03.22 |
[Algorithm] ์ซ์ ํ์ ๋ํ (0) | 2023.03.21 |
[Algorithm] ๊ธ๊ณผ ์ ์ด๋ฐํ๊ธฐ (0) | 2023.03.20 |