ํฐ์คํ ๋ฆฌ ๋ทฐ
Algorithm/Baekjoon
[JavaScript/node.js] ๋ฐฑ์ค 14943๋ฒ - ๋ฒผ๋ฃฉ ์์ฅ
๊ฐ๋ฐ๊ฐ๊ตด๐ธ 2022. 9. 19. 18:33[๋ฌธ์ ]
https://www.acmicpc.net/problem/14943
[ํ์ด]
+๊ฐ์ ํ๋งค ๋ฐฐ์ด(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
- git
- ๋ฐฑ์ค
- TDD
- ๋คํธ์ํฌ
- 2019 ์นด์นด์ค ๊ฐ๋ฐ์ ๊ฒจ์ธ ์ธํด
- ์ด๋ถํ์
- ๋ค์ด๋๋ฏน ํ๋ก๊ทธ๋๋ฐ
- ํ๋กํ ์ฝ
- fp
- ์๊ณ ๋ฆฌ์ฆ
- ๋ฐฑ์ค javascript
- ๋ชจ๋ ์๋ฐ์คํฌ๋ฆฝํธ deep dive
- http
- ์นด์นด์ค ์ธํด
- ์ด์์ฒด์
- JavaScript
- ๋ฐฑ์ค node.js
- ๋ ์์ปฌ ํ๊ฒฝ
- ์ฝ๋ฉํ ์คํธ
- Baekjoon
- ๋์์ธ ํจํด
- ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ
- ํ๋กํผํฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- map
- ํฌํฌ์ธํฐ
- ํจ์ํ ํ๋ก๊ทธ๋๋ฐ
- ์ ์ญ ๋ณ์
- ํ๋ก๊ทธ๋๋จธ์ค
- ์๋ฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
๊ธ ๋ณด๊ดํจ