# [Algorithm/JS] ๋ฐฑ์ค 13305๋ฒ ์ ์๋ ์ธ์ง
๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ (opens new window)
# Question
์๋ก ๋ค๋ฅธ N๊ฐ์ ์์ฐ์์ ํฉ์ด S๋ผ๊ณ ํ๋ค. S๋ฅผ ์ ๋, ์์ฐ์ N์ ์ต๋๊ฐ์ ์ผ๋ง์ผ๊น?
์ด๋ค ๋๋ผ์ N๊ฐ์ ๋์๊ฐ ์๋ค. ์ด ๋์๋ค์ ์ผ์ง์ ๋๋ก ์์ ์๋ค. ํธ์์ ์ผ์ง์ ์ ์ํ ๋ฐฉํฅ์ผ๋ก ๋์. ์ ์ผ ์ผ์ชฝ์ ๋์์์ ์ ์ผ ์ค๋ฅธ์ชฝ์ ๋์๋ก ์๋์ฐจ๋ฅผ ์ด์ฉํ์ฌ ์ด๋ํ๋ ค๊ณ ํ๋ค. ์ธ์ ํ ๋ ๋์ ์ฌ์ด์ ๋๋ก๋ค์ ์๋ก ๊ธธ์ด๊ฐ ๋ค๋ฅผ ์ ์๋ค. ๋๋ก ๊ธธ์ด์ ๋จ์๋ km๋ฅผ ์ฌ์ฉํ๋ค.
์ฒ์ ์ถ๋ฐํ ๋ ์๋์ฐจ์๋ ๊ธฐ๋ฆ์ด ์์ด์ ์ฃผ์ ์์์ ๊ธฐ๋ฆ์ ๋ฃ๊ณ ์ถ๋ฐํ์ฌ์ผ ํ๋ค. ๊ธฐ๋ฆํต์ ํฌ๊ธฐ๋ ๋ฌด์ ํ์ด์ด์ ์ผ๋ง๋ ์ง ๋ง์ ๊ธฐ๋ฆ์ ๋ฃ์ ์ ์๋ค. ๋๋ก๋ฅผ ์ด์ฉํ์ฌ ์ด๋ํ ๋ 1km๋ง๋ค 1๋ฆฌํฐ์ ๊ธฐ๋ฆ์ ์ฌ์ฉํ๋ค. ๊ฐ ๋์์๋ ๋จ ํ๋์ ์ฃผ์ ์๊ฐ ์์ผ๋ฉฐ, ๋์ ๋ง๋ค ์ฃผ์ ์์ ๋ฆฌํฐ๋น ๊ฐ๊ฒฉ์ ๋ค๋ฅผ ์ ์๋ค. ๊ฐ๊ฒฉ์ ๋จ์๋ ์์ ์ฌ์ฉํ๋ค.
์๋ฅผ ๋ค์ด, ์ด ๋๋ผ์ ๋ค์ ๊ทธ๋ฆผ์ฒ๋ผ 4๊ฐ์ ๋์๊ฐ ์๋ค๊ณ ํ์. ์ ์์ ์๋ ์ซ์๋ ๊ทธ ๋์์ ์๋ ์ฃผ์ ์์ ๋ฆฌํฐ๋น ๊ฐ๊ฒฉ์ด๋ค. ๋๋ก ์์ ์๋ ์ซ์๋ ๋๋ก์ ๊ธธ์ด๋ฅผ ํ์ํ ๊ฒ์ด๋ค.
์ ์ผ ์ผ์ชฝ ๋์์์ 6๋ฆฌํฐ์ ๊ธฐ๋ฆ์ ๋ฃ๊ณ , ๋ ์ด์์ ์ฃผ์ ์์ด ์ ์ผ ์ค๋ฅธ์ชฝ ๋์๊น์ง ์ด๋ํ๋ฉด ์ด ๋น์ฉ์ 30์์ด๋ค. ๋ง์ฝ ์ ์ผ ์ผ์ชฝ ๋์์์ 2๋ฆฌํฐ์ ๊ธฐ๋ฆ์ ๋ฃ๊ณ (2ร5 = 10์) ๋ค์ ๋ฒ ๋์๊น์ง ์ด๋ํ ํ 3๋ฆฌํฐ์ ๊ธฐ๋ฆ์ ๋ฃ๊ณ (3ร2 = 6์) ๋ค์ ๋์์์ 1๋ฆฌํฐ์ ๊ธฐ๋ฆ์ ๋ฃ์ด(1ร4 = 4์) ์ ์ผ ์ค๋ฅธ์ชฝ ๋์๋ก ์ด๋ํ๋ฉด, ์ด ๋น์ฉ์ 20์์ด๋ค. ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ์ ์ผ ์ผ์ชฝ ๋์์์ 2๋ฆฌํฐ์ ๊ธฐ๋ฆ์ ๋ฃ๊ณ (2ร5 = 10์) ๋ค์ ๋ฒ ๋์๊น์ง ์ด๋ํ ํ 4๋ฆฌํฐ์ ๊ธฐ๋ฆ์ ๋ฃ๊ณ (4ร2 = 8์) ์ ์ผ ์ค๋ฅธ์ชฝ ๋์๊น์ง ์ด๋ํ๋ฉด, ์ด ๋น์ฉ์ 18์์ด๋ค.
๊ฐ ๋์์ ์๋ ์ฃผ์ ์์ ๊ธฐ๋ฆ ๊ฐ๊ฒฉ๊ณผ, ๊ฐ ๋์๋ฅผ ์ฐ๊ฒฐํ๋ ๋๋ก์ ๊ธธ์ด๋ฅผ ์ ๋ ฅ์ผ๋ก ๋ฐ์ ์ ์ผ ์ผ์ชฝ ๋์์์ ์ ์ผ ์ค๋ฅธ์ชฝ ๋์๋ก ์ด๋ํ๋ ์ต์์ ๋น์ฉ์ ๊ณ์ฐํ๋ ํ๋ก๊ทธ๋จ์ ์์ฑํ์์ค.
# Input
ํ์ค ์ ๋ ฅ์ผ๋ก ๋ค์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. ์ฒซ ๋ฒ์งธ ์ค์๋ ๋์์ ๊ฐ์๋ฅผ ๋ํ๋ด๋ ์ ์ N(2 โค N โค 100,000)์ด ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ ์ธ์ ํ ๋ ๋์๋ฅผ ์ฐ๊ฒฐํ๋ ๋๋ก์ ๊ธธ์ด๊ฐ ์ ์ผ ์ผ์ชฝ ๋๋ก๋ถํฐ N-1๊ฐ์ ์์ฐ์๋ก ์ฃผ์ด์ง๋ค. ๋ค์ ์ค์๋ ์ฃผ์ ์์ ๋ฆฌํฐ๋น ๊ฐ๊ฒฉ์ด ์ ์ผ ์ผ์ชฝ ๋์๋ถํฐ ์์๋๋ก N๊ฐ์ ์์ฐ์๋ก ์ฃผ์ด์ง๋ค. ์ ์ผ ์ผ์ชฝ ๋์๋ถํฐ ์ ์ผ ์ค๋ฅธ์ชฝ ๋์๊น์ง์ ๊ฑฐ๋ฆฌ๋ 1์ด์ 1,000,000,000 ์ดํ์ ์์ฐ์์ด๋ค. ๋ฆฌํฐ๋น ๊ฐ๊ฒฉ์ 1 ์ด์ 1,000,000,000 ์ดํ์ ์์ฐ์์ด๋ค.
# Output
ํ์ค ์ถ๋ ฅ์ผ๋ก ์ ์ผ ์ผ์ชฝ ๋์์์ ์ ์ผ ์ค๋ฅธ์ชฝ ๋์๋ก ๊ฐ๋ ์ต์ ๋น์ฉ์ ์ถ๋ ฅํ๋ค.
# Sub task
๋ฒํธ | ๋ฐฐ์ | ์ ํ |
---|---|---|
1 | 17 | ๋ชจ๋ ์ฃผ์ ์์ ๋ฆฌํฐ๋น ๊ฐ๊ฒฉ์ 1์์ด๋ค. |
2 | 41 | 2 โค N โค 1,000, ์ ์ผ ์ผ์ชฝ ๋์๋ถํฐ ์ ์ผ ์ค๋ฅธ์ชฝ ๋์๊น์ง์ ๊ฑฐ๋ฆฌ๋ ์ต๋ 10,000, ๋ฆฌํฐ ๋น ๊ฐ๊ฒฉ์ ์ต๋ 10,000์ด๋ค. |
3 | 42 | ์๋์ ์ ์ฝ์กฐ๊ฑด ์ด์ธ์ ์๋ฌด ์ ์ฝ์กฐ๊ฑด์ด ์๋ค. |
# Example
# Input 1
4
2 3 1
5 2 4 1
2
3
# Output 1
18
# Input 2
4
3 3 4
1 1 1 1
2
3
# Output 2
10
# Solution
์๊ณ ๋ฆฌ์ฆ: ๊ทธ๋ฆฌ๋
์ด ๋ฌธ์ ๋ ๋ค์ ๋์์์์ ์ฃผ์ ๊ฐ๊ฒฉ์ด ํ์ฌ ๋์์ ๊ฐ๊ฒฉ๋ณด๋ค ์ ๋ ดํ์ง ๋น์ผ์ง ๋น๊ตํ์ฌ, ํ์ฌ ๋์์ ์ฃผ์ ๊ฐ๊ฒฉ์ด ๋ ์ธ๋ค๋ฉด ํ์ฌ ์ฃผ์ ์์์ ์ค๋ฅธ์ชฝ์ ์๋ ๋์๋ค์ ๊ฑฐ๋ฆฌ๊น์ง ๊ฐ ์ ์๋๋ก ์ฃผ์ ๋ฅผ ํด์ผํ๋ค. ๋จ ์ค๋ฅธ์ชฝ์ ์๋ ๋์๋ค ์ค ํ ์ฃผ์ ์๋ณด๋ค ๋ ์ผ ๊ณณ์ด ์๋ค๋ฉด ๊ทธ ์ง์ ๋ถํฐ๋ ๋ ์ผ ๊ฐ๊ฒฉ์ผ๋ก ์ฃผ์ ๋ฅผ ํด์ผํ๋ค.
# ๋ถ๋ถ ์ฑ๊ณต(58์ )
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
const [n, d, p] = fs.readFileSync(filePath).toString().trim().split('\n');
let dis = d.split(' ').map(Number); // 1
let cost = p.split(' ').map(Number); // 1
let curr = cost[0]; // 2
let sum = 0; // 3
for (let i = 0; i < n - 1; i++) {
sum += curr * dis[i]; // 4
if (curr > cost[i + 1]) curr = cost[i + 1]; // 5
}
console.log(sum);
2
3
4
5
6
7
8
9
10
11
12
13
14
์๊ณ ๋ฆฌ์ฆ: ๊ทธ๋ฆฌ๋
- ๋์ ๊ฐ์ ๊ฑฐ๋ฆฌ๋ฅผ dis ๋ณ์์ Number ํ์ ๋ฐฐ์ด๋ก, ์ฃผ์ ์์ ๋ฆฌํฐ๋น ๊ฐ๊ฒฉ์ cost ๋ฐฐ์ด์ Number ํ์ ๋ฐฐ์ด๋ก ํ ๋นํ๋ค.
- curr ์ ์ง๋์จ ๋ง์๋ค ์ค ๊ฐ์ฅ ์ผ ์ฃผ์ ๊ฐ์ ๋ด์ ๊ฒ์ด๋ค. ์ด๊น๊ฐ์ผ๋ก ๊ฐ์ฅ ์ ๋์๋ฅผ ํ ๋นํ๋ค.
- ๊ฐ์ฅ ๋ง์ง๋ง ๋ง์์ ์ฃผ์ ๊ฐ ํ์ ์๊ธฐ ๋๋ฌธ์ n - 1 ๊น์ง ๋ฐ๋ณตํ๋ค.
- ์ง๋์จ ๊ฑฐ๋ฆฌ๊น์ง ์ฃผ์ ํ ๊ฐ๊ฒฉ์ด๋ค. (๊ฐ๊ฒฉ x ๊ฑฐ๋ฆฌ)
- ๋ค์ ๋์์ ์ฃผ์ ๊ฐ๊ฒฉ์ด ๋ ์ธ๋ค๋ฉด
curr
๋ณ์์ ๋ค์ ์ฃผ์ ๊ฐ๊ฒฉ์ ์ ์ฅํ๋ค.
์ ๊ณผ์ ์ ๋ฐ๋ณตํ๋ฉด ์ต์ข ์ ์ผ๋ก ์ต์์ ๋น์ฉ์ ๊ณ์ฐํ ์ ์๋ค.
58์ ์ผ๋ก ๋ถ๋ถ ์ฑ๊ณตํ๋ค. ์๋ธ ํ์คํฌ์ 2๋ฒ๊น์ง ์ํํ ๊ฒ์ด๋ค.
3๋ฒ ํ์คํฌ์ โ์๋์ ์ ์ฝ์กฐ๊ฑด ์ด์ธ์ ์๋ฌด ์ ์ฝ์กฐ๊ฑด์ด ์๋ค.โ ๊ฐ ๋ฌด์จ ์๋ฏธ์ธ์ง ํ์ฐธ ๊ณ ๋ฏผํ๋ค.
๋ค๋ฅธ ์ฌ๋๋ค์ ์ฝ๋๋ฅผ ๋ณด๋ Number ํ์ ์ด ์๋ BigInt ํ์ ์ ์ฌ์ฉํ๋ค.
BigInt ๋ ๊ธธ์ด์ โ์ ์ฝ ์์ดโ ์ ์๋ฅผ ๋ค๋ฃฐ ์ ์๊ฒ ํด์ฃผ๋ ์ซ์ํ์ด๋ค.
# ์ฑ๊ณต (100์ )
์ฝ๋๋ฅผ ๋ชจ๋ Number
ํ์
์ด ์๋ BigInt
ํ์
์ผ๋ก ๋ณ๊ฒฝํ์ฌ ์ฌ ์ ์ถํ๋ค.
const fs = require('fs');
const filePath = process.platform === 'linux' ? '/dev/stdin' : '../input.txt';
const [n, d, p] = fs.readFileSync(filePath).toString().trim().split('\n');
let dis = d.split(' ').map(BigInt);
let cost = p.split(' ').map(BigInt);
let curr = cost[0];
let sum = 0n;
for (let i = 0; i < n - 1; i++) {
sum += curr * dis[i];
if (curr > cost[i + 1]) curr = cost[i + 1];
}
console.log(String(sum));
2
3
4
5
6
7
8
9
10
11
12
13
14
์ฑ๊ณต!