ํฐ์คํ ๋ฆฌ ๋ทฐ
[JavaScript/node.js] ๋ฐฑ์ค 20437๋ฒ - ๋ฌธ์์ด ๊ฒ์ 2
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 8. 23. 15:11[๋ฌธ์ ]
https://www.acmicpc.net/problem/20437
[ํ์ด]
์ด๋ค ๋ฌธ์๋ฅผ a๋ผ๊ณ ํ๋ค๋ฉด ์ ํํ K๊ฐ๋ฅผ ํฌํจํ๋ฉฐ, ์ฒซ ๋ฒ์งธ์ ๋ง์ง๋ง ๊ธ์๊ฐ ๋ชจ๋ a์ธ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํด์ผ ํฉ๋๋ค.
๋ฐ๋ผ์ for๋ฌธ์ผ๋ก ๋ฌธ์์ดW์ ์ํํ๋ฉฐ K๊ฐ ์ด์ ํฌํจ๋ ๋ฌธ์๋ฅผ ์ฐพ์์ผํฉ๋๋ค.
1. Map์ ํ์ฉํ์ฌ key = ๋ฌธ์ , value = [๋ฌธ์์ ๊ฐ์, index1, index2, ... ] ์ ํํ๋ก ์ ์ฅํด ์ฃผ์์ต๋๋ค.
2. ์์ฑ๋ Map์ ์ํํ๋ฉฐ value์ 0๋ฒ์งธ ๊ฐ, ์ฆ ๋ฌธ์์ ๊ฐ์๊ฐ K์ด์์ธ key๊ฐ์ ๋ํด์๋ง ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํฉ๋๋ค.
3. value์ 1๋ฒ์งธ๊ฐ~๋ง์ง๋ง๊ฐ ๊น์ง ๋ฌธ์์ ์์น๋ค์ด ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ธฐ ๋๋ฌธ์ K๊ฐ์ฉ ๋ฌถ์ด์ ๊ธธ์ด๋ฅผ ๊ตฌํฉ๋๋ค.
4. ๊ตฌํด์ง ๋ฌธ์์ด์ ๊ธธ์ด๋ค์ words๋ฐฐ์ด์ ๋ฃ๊ณ , sort์ฐ์ฐ์ ํตํด ์ ๋ ฌํด ๊ฐ์ฅ ์งง์ ๊ฐ๊ณผ ๊ฐ์ฅ ๊ธด ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
๋ง์ฝ, words์ ๋ฐฐ์ด์ด ๋น์ด์๋ค๋ฉด ๋ง๋ค์ ์๋ ๋ฌธ์์ด์ด ์๊ธฐ ๋๋ฌธ์ -1์ ์ถ๋ ฅํฉ๋๋ค.
1. ์์ ๊ฐ์ ๋ฐฉ๋ฒ์ผ๋ก ์์ 1๋ฒ์ T1์ ๊ตฌํด๋ณด๋ฉด Map์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ฌธ์์ด = superaquatornado
K = 2
Map(12) {
's' => [ 1, 0 ],
'u' => [ 2, 1, 7 ],
'p' => [ 1, 2 ],
'e' => [ 1, 3 ],
'r' => [ 2, 4, 11 ],
'a' => [ 3, 5, 8, 13 ],
'q' => [ 1, 6 ],
't' => [ 1, 9 ],
'o' => [ 2, 10, 15 ],
'n' => [ 1, 12 ],
'd' => [ 1, 14 ]
}
2. Map์ ์ํํ๋ฉฐ K๊ฐ ์ด์ ๋ฌธ์๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฐ์ ๋ฝ์๋ด๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
Map(12) {
'u' => [ 2, 1, 7 ]
'r' => [ 2, 4, 11 ],
'a' => [ 3, 5, 8, 13 ]
'o' => [ 2, 10, 15 ]
}
3. K๊ฐ๋ฅผ ๊ฐ์ง ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ value๋ฐฐ์ด์ 1๋ฒ์งธ ์ดํ index๋ค์ K ๊ฐ๊ฒฉ์ผ๋ก ๋นผ์ ๊ตฌํฉ๋๋ค.
์๋ฅผ ๋ค์ด, 'u'๋ [1, 7] ์ ์์นํ๋ฏ๋ก ๊ธธ์ด๋ 7 - 1 + 1 = 6์ ๋๋ค.
4. ๊ตฌํด์ง ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ ์ฅํ ๋ฐฐ์ด words์ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌํ ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
[ 4, 6, 6, 7, 8 ]
๋ฐ๋ผ์ ์ต์๊ฐ 4, ์ต๋๊ฐ 8์ ์ถ๋ ฅํ๋ฉด ๋ฉ๋๋ค.
[์ฝ๋]
const fs = require("fs");
let input = fs.readFileSync("/dev/stdin").toString().split('\n');
const T = Number.parseInt(input[0]);
const findWord = (W, K) => {
const map = new Map();
const words = [];
for(let i=0;i<W.length;i++) {
if(!map.has(W[i])) {
map.set(W[i], [1, i]);
} else {
const arr = [...map.get(W[i]), i];
arr[0] += 1;
map.set(W[i], arr);
}
}
map.forEach((v, k) => {
if(v[0] >= K) {
for(i=v.length-1;i>=K;i--) {
words.push(v[i] - v[i-K+1] + 1);
}
}
});
if(words.length === 0) {
console.log(-1);
} else {
words.sort((a,b) => a-b);
console.log(words[0] + " " + words[words.length-1]);
}
}
for(let i=1;i<=T*2;i+=2) {
const W = input[i];
const K = Number.parseInt(input[i+1]);
findWord(W,K);
}
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/node.js] ๋ฐฑ์ค 3980๋ฒ - ์ ๋ฐ ๋ช ๋จ (0) | 2022.09.03 |
---|---|
[JavaScript/node.js] ๋ฐฑ์ค 1522๋ฒ - ๋ฌธ์์ด ๊ตํ (0) | 2022.08.24 |
[JavaScript] ๋ฐฑ์ค 13549๋ฒ - ์จ๋ฐ๊ผญ์ง 3 (0) | 2022.08.05 |
[JavaScript] ๋ฐฑ์ค 2457๋ฒ - ๊ณต์ฃผ๋์ ์ ์ (0) | 2022.08.04 |
[JavaScript] ๋ฐฑ์ค 1806๋ฒ - ๋ถ๋ถํฉ (0) | 2022.08.01 |
- Total
- Today
- Yesterday
- ๋ฐฑ์ค javascript
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ๋์์ธ ํจํด
- ์๊ณ ๋ฆฌ์ฆ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ๋คํธ์ํฌ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- JavaScript
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค
- ์ด์์ฒด์
- TDD
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ํฌํฌ์ธํฐ
- git
- Baekjoon
- ๋ ์์ปฌ ํ๊ฒฝ
- fp
- ํ๋กํ ์ฝ
- ํ๋กํผํฐ
- ์นด์นด์ค ์ธํด
- ์๋ฐ
- ์ด๋ถํ์
- http
- ํ๋ก๊ทธ๋๋จธ์ค
- map
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- ๋ฐฑ์ค node.js
- ์ ์ญ ๋ณ์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |