# [Algorithm/JS] ๋ฐฑ์ค 1439๋ฒ ๋ค์ง๊ธฐ
๐ ๋ฌธ์ ๋ฐ๋ก๊ฐ๊ธฐ (opens new window)
# Question
๋ค์์ด๋ 0๊ณผ 1๋ก๋ง ์ด๋ฃจ์ด์ง ๋ฌธ์์ด S๋ฅผ ๊ฐ์ง๊ณ ์๋ค. ๋ค์์ด๋ ์ด ๋ฌธ์์ด S์ ์๋ ๋ชจ๋ ์ซ์๋ฅผ ์ ๋ถ ๊ฐ๊ฒ ๋ง๋ค๋ ค๊ณ ํ๋ค. ๋ค์์ด๊ฐ ํ ์ ์๋ ํ๋์ S์์ ์ฐ์๋ ํ๋ ์ด์์ ์ซ์๋ฅผ ์ก๊ณ ๋ชจ๋ ๋ค์ง๋ ๊ฒ์ด๋ค. ๋ค์ง๋ ๊ฒ์ 1์ 0์ผ๋ก, 0์ 1๋ก ๋ฐ๊พธ๋ ๊ฒ์ ์๋ฏธํ๋ค.
์๋ฅผ ๋ค์ด S=0001100 ์ผ ๋,
์ ์ฒด๋ฅผ ๋ค์ง์ผ๋ฉด 1110011์ด ๋๋ค. 4๋ฒ์งธ ๋ฌธ์๋ถํฐ 5๋ฒ์งธ ๋ฌธ์๊น์ง ๋ค์ง์ผ๋ฉด 1111111์ด ๋์ด์ 2๋ฒ ๋ง์ ๋ชจ๋ ๊ฐ์ ์ซ์๋ก ๋ง๋ค ์ ์๋ค. ํ์ง๋ง, ์ฒ์๋ถํฐ 4๋ฒ์งธ ๋ฌธ์๋ถํฐ 5๋ฒ์งธ ๋ฌธ์๊น์ง ๋ฌธ์๋ฅผ ๋ค์ง์ผ๋ฉด ํ ๋ฒ์ 0000000์ด ๋์ด์ 1๋ฒ ๋ง์ ๋ชจ๋ ๊ฐ์ ์ซ์๋ก ๋ง๋ค ์ ์๋ค.
๋ฌธ์์ด S๊ฐ ์ฃผ์ด์ก์ ๋, ๋ค์์ด๊ฐ ํด์ผํ๋ ํ๋์ ์ต์ ํ์๋ฅผ ์ถ๋ ฅํ์์ค.
# Input
์ฒซ์งธ ์ค์ ๋ฌธ์์ด S๊ฐ ์ฃผ์ด์ง๋ค. S์ ๊ธธ์ด๋ 100๋ง๋ณด๋ค ์๋ค.
# Output
์ฒซ์งธ ์ค์ ๋ค์์ด๊ฐ ํด์ผํ๋ ํ๋์ ์ต์ ํ์๋ฅผ ์ถ๋ ฅํ๋ค.
# Example
# Input 1
0001100
# Output 1
1
# Input 2
11111
# Output 2
0
# Input 3
0000001
# Output 3
1
๋ ๋ง์ ์์ ๋ ์๋จ url ์ฐธ๊ณ
# Solution
์๊ณ ๋ฆฌ์ฆ: Greedy ํ์๋ฒ
# ๊ณํ ์ธ์ฐ๊ธฐ
์ ๋ ฅ๊ฐ์ ์ฐ์๋ 0์ ๊ทธ๋ฃน๊ณผ 1์ด ๊ทธ๋ฃน์ ๊ณ์ฐํด ๋ ๊ทธ๋ฃน์ ์๊ฐ ๋ ๋ง์ ๊ทธ๋ฃน์ ์๋ฅผ ์ถ๋ ฅ
ex) ์ ๋ ฅ๊ฐ์ด
11001100110011000001
์ผ ๋ ์๋์ ๊ฐ์ด ๊ทธ๋ฃน์ง์ ์ ์๋ค. 11 00 11 00 11 00 11 0000 1 1๋ก ๊ตฌ์ฑ๋ ๊ทธ๋ฃน์ด 5๊ฐ, 0์ผ๋ก ๊ตฌ์ฑ๋ 4๊ทธ๋ฃน
- ์ ๋ ฅ๊ฐ(input)์ ํ ๊ธ์์ฉ ์ชผ๊ฐ ๋ฐฐ์ด๋ก ๋ฐ์์จ๋ค.
- ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ๊ฒ โ ๋ฐ๋ณต๋ฌธ ์์์ 1๋ถํฐ : input ๋ฐฐ์ด์ ์ฒซ๋ฒ ๋๋ฒ์งธ ์์๋ถํฐ ์์ํ๊ธฐ ์ํจ
- ์ด์ ์ธ๋ฑ์ค ๊ฐ๊ณผ ํ์ฌ ์ธ๋ฑ์ค ๊ฐ์ ๋น๊ตํ๋ค. ์ด์ ์ธ๋ฑ์ค์ ๊ฐ์ ์ ์ฅํ๊ธฐ ์ํ pre ๋ณ์ ์ ์ธ โ ์ด๊ธฐ ๊ฐ์ input ๋ฐฐ์ด์ ์ฒซ๋ฒ์งธ ์์
- ๋ ๊ฐ์ด ๋ค๋ฅด๋ค๋ฉด ๊ทธ๋ฃน์ผ๋ก ๋ถ๋ฆฌ๋๋ ์ง์ ์ด๋ฏ๋ก pre ๋ณ์๋ฅผ ํ์ฌ ๊ฐ์ผ๋ก ๊ต์ฒดํด์ค๋ค.
- ๋ถ๋ฆฌ ์ง์ ์์ ํ์ฌ ๊ฐ์ด 0 ์ด๋ผ๋ฉด zero ๋ณ์ ์นด์ดํธ, 1์ด๋ผ๋ฉด one ๋ณ์ ์นด์ดํธ
- ๋ ์นด์ดํธ ๋ณ์์ค ์์ ๋ณ์ ์ถ๋ ฅ
# ๋์ ํ์ด
const fs = require('fs');
const filePath = process.platform === 'linux' ? 'dev/stdin' : '../input.txt';
const input = fs.readFileSync(filePath).toString().trim().split('');
let pre = input[0];
let one = 0;
let zero = 0;
for (let i = 1; i < input.length; i++) {
let cur = input[i];
if (pre !== cur) {
pre = cur;
if (cur === '1') one++;
else zero++;
}
}
console.log(Math.min(one, zero));
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# ๊ณํ๊ณผ ํ์ด ๋น๊ต
์ฒซ ๊ทธ๋ฃน์ ์๊ฐ ์นด์ดํธ ๋์ง ์์ ์ค์ ๊ทธ๋ฃน ์๋ณด๋ค 1์ด ์๊ฒ ์ถ๋ ฅ๋๋ ๊ฒ์ ํ์ธํ๋ค.
์ฌ์ค ์ ๋ ฅ๊ฐ์ด 0๊ณผ 1์ด ๋์๊ฐ๋ฉด์ ๋์ค๋ ์์ด๊ธฐ ๋๋ฌธ์ ๋ต์ ์ํฅ์ด ์์ง ์์ง๋ง ์ ํํ ํ์ด๊ฐ ์๋๊ธฐ ๋๋ฌธ์ ์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํ๋ค.
๋ณ์๋ฅผ ์ ์ธํ ๋ค์ ๋ฐ๋ณต๋ฌธ ์คํ ์ pre ๋ณ์์ ์ด๊ธฐ ๊ฐ์ด 0์ด๋ผ๋ฉด zero๋ฅผ ์นด์ดํธ ํ๊ณ , 1์ด๋ผ๋ฉด one ๋ณ์๋ฅผ ์นด์ดํธํ๋ค.
if (pre === '0') zero++;
else one++;
2
# ์ต์ข ํ์ด
const fs = require('fs');
const filePath = process.platform === 'linux' ? 'dev/stdin' : '../input.txt';
const input = fs.readFileSync(filePath).toString().trim().split('');
let pre = input[0];
let one = 0;
let zero = 0;
if (pre === '0') zero++;
else zero++;
for (let i = 1; i < input.length; i++) {
let cur = input[i];
if (pre !== cur) {
pre = cur;
if (cur === '1') one++;
else zero++;
}
}
console.log(Math.min(one, zero));
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20