ํฐ์คํ ๋ฆฌ ๋ทฐ
Algorithm/Baekjoon
[JavaScript/node.js] ๋ฐฑ์ค 14943๋ฒ - ๋ฒผ๋ฃฉ ์์ฅ
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 9. 19. 18:33[๋ฌธ์ ]
https://www.acmicpc.net/problem/14943
14943๋ฒ: ๋ฒผ๋ฃฉ ์์ฅ
๋ฒผ๋ฃฉ์์ฅ์์ ์ฌ๋๋ค์ด ๋ฒผ๋ฃฉ์ ์ฌ๊ณ ํ๋ค. ๋๋๊ฒ๋ ๊ฐ ์ฌ๋๋ค์ด ์ฌ๋ ค๊ณ ํ๋ ๋ฒผ๋ฃฉ์ ํฉ๊ณผ ํ๋ ๋ฒผ๋ฃฉ์ ํฉ์ ๊ฐ๋ค. ๋ฒผ๋ฃฉ์ ์ฌ๊ฑฐ๋ ํ๋ ์ฌ๋๋ค์ ์๋ก ์ผ๋ ฌ๋ก ๊ธธ๊ฒ ์ ์์ผ๋ฉฐ, ์ธ์ ํ ๊ฐ๊ฒ ์ฌ์ด
www.acmicpc.net
[ํ์ด]
+๊ฐ์ ํ๋งค ๋ฐฐ์ด(sale[]), -๊ฐ์ ๊ตฌ๋งค ๋ฐฐ์ด(buy[])์ ๊ฐ๊ฐ ์ ์ฅํ ํ ํฌํฌ์ธํฐ๋ฅผ ํ์ฉํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์์ต๋๋ค.
1. info[]์ ๋ด๊ฒจ์๋ ๋ฒผ๋ฃฉ ์์ฅ ์ ๋ณด๋ค์ sale๊ณผ buy์ [๊ธ์ก, index] ํํ๋ก ์ ์ฅํฉ๋๋ค.
2. ํ๋งค ์ ๋ณด์ ๊ตฌ๋งค ์ ๋ณด๋ก ํฌํฌ์ธํฐ๋ฅผ ์งํํฉ๋๋ค.
- buy์ ์์น๋ฅผ ์ ์ฅํ left ๋ณ์์, sale์ ์์น๋ฅผ ์ ์ฅํ right ๋ณ์๋ฅผ ๊ฐ๊ฐ 0์ผ๋ก ์ด๊ธฐํ ํฉ๋๋ค.
- buy์ left ๊ธ์ก๊ณผ sale์ right๊ธ์ก์ ๋น๊ตํ์ฌ ๋น์ฉ total๊ณผ left, right๋ฅผ ๊ฐฑ์ ํฉ๋๋ค.
- buy์ ๊ธ์ก๊ณผ sale์ ๊ธ์ก์ด ๊ฐ๋ค๋ฉด ํ๋งคํ๋ ๋ฒผ๋ฃฉ์ ๋ชจ๋ ๊ตฌ๋งคํ์์ผ๋ฏ๋ก left์ right๋ฅผ ๋ชจ๋ +1
=> ๋น์ฉ์ [left๊ฐ ๋ฐ๋ผ๋ณด๋ buy์ index - right๊ฐ ๋ฐ๋ผ๋ณด๋ sale์ index| * ๊ตฌ๋งค/ํ๋งค ๊ธ์ก - buy๊ธ์ก์ด ๋ ํฌ๋ค๋ฉด sale์ ๋ฒผ๋ฃฉ์ ๋ชจ๋ ํ๋งคํ๊ณ right++
=> ๋น์ฉ์ [left๊ฐ ๋ฐ๋ผ๋ณด๋ buy์ index - right๊ฐ ๋ฐ๋ผ๋ณด๋ sale์ index| * ํ๋งค ๊ธ์ก
=> buy ๊ธ์ก์์ sale์ด ํ๋งคํ ๊ธ์ก๋งํผ ๋นผ์ ๊ฐฑ์ - sale๊ธ์ก์ด ๋ ํฌ๋ค๋ฉด buy์ ๋ฒผ๋ฃฉ์ ๋ชจ๋ ๊ตฌ๋งคํ๊ณ left++
=> ๋น์ฉ์ [left๊ฐ ๋ฐ๋ผ๋ณด๋ buy์ index - right๊ฐ ๋ฐ๋ผ๋ณด๋ sale์ index| * ๊ตฌ๋งค ๊ธ์ก
=> sale ๊ธ์ก์์ buy๊ฐ ๊ตฌ๋งคํ ๊ธ์ก๋งํผ ๋นผ์ ๊ฐฑ์
- buy์ ๊ธ์ก๊ณผ sale์ ๊ธ์ก์ด ๊ฐ๋ค๋ฉด ํ๋งคํ๋ ๋ฒผ๋ฃฉ์ ๋ชจ๋ ๊ตฌ๋งคํ์์ผ๋ฏ๋ก left์ right๋ฅผ ๋ชจ๋ +1
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๊ณ์ฐํ๋ฉด ์ต์ ๋น์ฉ์ 950์ด ๋ฉ๋๋ค.
[์ฝ๋]
// ๋ฒผ๋ฃฉ ์์ฅ
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : './input.txt';
const input = fs.readFileSync(filePath).toString().split('\n');
const [N] = input[0].split(" ").map(Number);
const info = input[1].split(" ").map(Number);
const buy = [];
const sale = [];
for(let i=0;i<info.length;i++) {
if(info[i] > 0) {
sale.push([info[i], i]);
} else {
buy.push([info[i], i]);
}
}
let left = 0;
let right = 0;
let total = 0;
while(left < buy.length && right < sale.length) {
const diff = Math.abs(buy[left][0] + sale[right][0]);
if(diff == 0) {
// ํ๋งค ๊ธ์ก === ๊ตฌ๋งค ๊ธ์ก
total += sale[right][0] * Math.abs(buy[left][1] - sale[right][1]);
left++;
right++;
} else if(buy[left][0] + sale[right][0] < 0) {
// ๊ตฌ๋งค ๊ธ์ก์ด ๋ ํผ
total += sale[right][0] * Math.abs(buy[left][1] - sale[right][1]);
buy[left][0] = diff*-1;
right++;
} else if(buy[left][0] + sale[right][0] > 0) {
// ํ๋งค ๊ธ์ก์ด ๋ ํผ
total += buy[left][0] * -1 * Math.abs(buy[left][1] - sale[right][1]);
sale[right][0] = diff;
left++;
}
}
console.log(total);
'Algorithm > Baekjoon' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JavaScript/node.js] ๋ฐฑ์ค 24513๋ฒ - ์ข๋น ๋ฐ์ด๋ฌ์ค (0) | 2022.09.08 |
---|---|
[JavaScript/node.js] ๋ฐฑ์ค 3980๋ฒ - ์ ๋ฐ ๋ช ๋จ (0) | 2022.09.03 |
[JavaScript/node.js] ๋ฐฑ์ค 1522๋ฒ - ๋ฌธ์์ด ๊ตํ (0) | 2022.08.24 |
[JavaScript/node.js] ๋ฐฑ์ค 20437๋ฒ - ๋ฌธ์์ด ๊ฒ์ 2 (1) | 2022.08.23 |
[JavaScript] ๋ฐฑ์ค 13549๋ฒ - ์จ๋ฐ๊ผญ์ง 3 (0) | 2022.08.05 |
๊ณต์ง์ฌํญ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ
- Total
- Today
- Yesterday
๋งํฌ
TAG
- JavaScript
- fp
- ์๊ณ ๋ฆฌ์ฆ
- ๋ ์์ปฌ ํ๊ฒฝ
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- http
- ์ด์์ฒด์
- ์ ์ญ ๋ณ์
- ์ฝ๋ฉํ ์คํธ
- ๋ฐฑ์ค javascript
- ํฌํฌ์ธํฐ
- Baekjoon
- ๋ฐฑ์ค
- ๋์์ธ ํจํด
- ํ๋กํ ์ฝ
- map
- ํ๋กํผํฐ
- ์ด๋ถํ์
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐฑ์ค node.js
- TDD
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- git
- ์นด์นด์ค ์ธํด
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฐ
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ๋คํธ์ํฌ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
๊ธ ๋ณด๊ดํจ