ํฐ์คํ ๋ฆฌ ๋ทฐ
๐ ๊ฐ์
์์น์ ๋ฐ๋ผ ๋ฒํธ๊ฐ ๋งค๊ฒจ์ ธ ์๋ ์ํํธ๋ค์ ์ฅ์์ 5G ๊ธฐ์ง๊ตญ์ ์ค์นํ๋ ค๊ณ ํ๋ค. 5G ๊ธฐ์ง๊ตญ์ ๊ธฐ์กด์ ์ค์น๋์ด ์๋ 4G ๊ธฐ์ง๊ตญ๊ณผ๋ ์ ํ์ ์ ๋ฌ ๋ฒ์๊ฐ ๋ค๋ฅด๋ค. ๊ธฐ์กด์ 4G ๊ฐ ์ค์น๋์ด ์๋ ์ํํธ๋ค์ ๋ชฉ๋ก์ ๋ด์ ๋ฐฐ์ด stations ์ ์ด ์ํํธ์ ๊ฐ์ N, ๊ทธ๋ฆฌ๊ณ 5G ๊ธฐ์ง๊ตญ์ ์ค์นํ์ ๋์ ์ ํ ์ ๋ฌ ๋ฒ์๋ฅผ ๋ํ๋ด๋ W ๊ฐ ์ฃผ์ด์ก์ ๋, ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ค์นํด์ผ ํ๋ ๊ธฐ์ง๊ตญ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ์ฌ๋ผ.
์) N = 11, stations = [4, 11], W = 1
4๋ฒ ์ํํธ์ 11๋ฒ ์ํํธ์ ์ ํ ์ ๋ฌ ๋ฒ์ 1 ์ ๊ธฐ์ง๊ตญ์ด ์ค์น๋์ด ์์ผ๋ฏ๋ก, ์ ํ๋ฅผ ์ ๋ฌ๋ฐ์ ์ ์๋ ์ํํธ๋ ์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด 3, 4, 5, ๊ทธ๋ฆฌ๊ณ 10, 11๋ฒ ์ํํธ์ด๋ค.
๋๋จธ์ง 1, 2, 6, 7, 8, 9 ์ํํธ์๋ ๋ชจ๋ ์ ํ๊ฐ ์ ๋ฌ๋๊ธฐ ์ํด ์ต์ ๋ช ๊ฐ์ ๊ธฐ์ง๊ตญ์ ๋ ์ค์นํด์ผ ํ๋์ง๋ฅผ ๋ฌป๋ ๋ฌธ์ ์ด๋ค.
ps. ์ ๊ทธ๋ฆผ์ ๊ฒฝ์ฐ์๋ ์ต์ 3๊ฐ๋ ์ค์นํด์ผ ํ๋ค. 1, 7, 9 ๋๋ 2, 6, 8๋ฒ ์ํํธ์ ์ค์นํ๋ฉด ์์ชฝ W = 1 ๋งํผ์ ์ ํ ์ ๋ฌ ๋ฒ์๋ก ์ ํ๋ฅผ ์ ๋ฌํด์ ๋ชจ๋ ์ํํธ๊ฐ ์ ํ๋ฅผ ์ ๋ฌ๋ฐ์ ์ ์๋ค. 3๊ฐ ์ดํ๋ก๋ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์๋ค.
๐ฆพ ์ฒซ ๊ฑธ์
๋ฌธ์ ๋ฅผ ์ฒ์ ๋ง์ฃผํ์ ๋๋ ๋ฌด์ํ๊ฒ ํ๊ธฐ ๋ฐฉ๋ฒ์ด ๋ ์ฌ๋๋ค. ๋ค์๊ณผ ๊ฐ์ ๋ฐฉ๋ฒ์ด๋ค:
- N ๊ฐ์ ๋ชจ๋ ์ํํธ์ ๋ฒํธ๊ฐ 1 ~ N ๊น์ง ๋์ด๋์ด ์๋ ์๋ฃ ๊ตฌ์กฐ (์. ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ) ๋ฅผ ์์ฑํ๋ค.
- stations ์ W ๋ฅผ ์ฐธ๊ณ ํด์ ํ์ฌ ์ ํ๊ฐ ์ ๋ฌ๋๋ ์ํํธ๋ฅผ ์๋ฃ ๊ตฌ์กฐ์์ ์ ์ธํ๋ค.
- ์๋ฃ ๊ตฌ์กฐ์ ๋จ์ ์ํํธ ๋ฒํธ๋ค์ ๋์์ผ๋ก ์ฆ์คํด์ผ ํ๋ ๊ธฐ์ง๊ตญ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ๋ ์ฐ์ฐ์ ์คํํ๋ค. ์คํ๋๋ ์ฐ์ฐ์ ๋ค์๊ณผ ๊ฐ๋ค:
- ์) W ๊ฐ 1์ผ ๋๋ ์ํํธ ํ ๋ + ์ ์ชฝ์ ์ํํธ ๋ ๋ ๊น์ง ์ ํ๊ฐ ์ ๋ฌ๋๋ฏ๋ก ๊ธฐ์ง๊ตญ ํ๋ ๋น 3๋์ ์ํํธ๊ฐ ์ ํ๋ฅผ ์ ๋ฌ๋ฐ๋๋ค.
- ๋ง์ฝ ๋จ์ ์ํํธ๊ฐ 10๋์ด๋ฉด ์ต์ 4๊ฐ์ ๊ธฐ์ง๊ตญ์ ์ค์นํด์ผ ํ ๊ฒ์ด๋ค. 3๋์ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๋ ๊ธฐ์ง๊ตญ์ 3๊ฐ๋ฅผ ์ค์นํ๋ฉด 3 * 3 = 9๋์ ์ํํธ์๋ง ์ ํ๋ฅผ ์ ๋ฌํ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ต์ 4๊ฐ๊ฐ ํ์ํ๋ค.
์์ ๋ฐฉ์์๋ ๋๊ฐ์ง์ ๋ฌธ์ ๊ฐ ์๋ค:
- ์ฐ์ ๋ฌธ์ ์ ์กฐ๊ฑด์์ N ์ 2์ต ์ดํ์ ์์ฐ์์ด๋ค. ์ ๋ฐฉ์์ 1๋ฒ์์๋ 1๋ถํฐ N ๊น์ง ๋ชจ๋ ๋ฐ๋ณต๋ฌธ์ ํ์ฉํด์ ์๋ฃ ๊ตฌ์กฐ์ ์ง์ด๋ฃ์ผ๋ฏ๋ก ์ต๋ 2์ต๋ฒ์ ๋ฐ๋ณตํ ๊ฒ์ด๋ค. ์๊ฐ์ด ๋ง์ด ์์๋๋ค.
- ์ ํ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ํํธ์ ๊ฐ์๋ง์ผ๋ก๋ ์ ํํ ํ์ ๊ธฐ์ง๊ตญ์ ์ต์ ๊ฐ์๋ฅผ ๊ตฌํ ์ ์๋ค. ๋ง์ฝ 10๋๊ฐ ์ ํ ์ ๋ฌ์ด ํ์ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด, 10๋๊ฐ ๋ชจ๋ ๋ชจ์ฌ ์์ ๋์๋ง ์ ๋ฐฉ์์ 3๋ฒ์์ ์ค๋ช ํ๋ ์ฐ์ฐ์ด ์ ํจํ๋ค. ๋ง์ผ 10๋์ ์ํํธ์ 1๋๋ง๋ค ์ด๋ฏธ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ๋ค์ด ๊ปด ์๊ณ ์ด๋ก ์ธํด ๊ฐ ์ํํธ๋ค์ด W ์ด์ ๋จ์ด์ ธ ์๋ค๋ฉด ์ต์ 10๊ฐ์ ๊ธฐ์ง๊ตญ ์ค์น๊ฐ ํ์ํ๊ฒ ๋๋ค.
๊ทธ๋์ ์ฒ์ ๊ณ ์ํ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์๋ค.
๐ก ๋ ๋ฒ์งธ ์๋, ๊ธ์ ์ ์ธ ๊ฒฐ๊ณผ
์กฐ๊ธ์ ํด์์ ์ทจํ๊ณ ๋ ๋ฒ์งธ๋ก ์๊ฐํด๋ธ ๋ฐฉ๋ฒ์ ๋ถ๋ฆฐ ๋ฐฐ์ด์ด false ๋ก ์ด๊ธฐํ๊ฐ ๋๋ค๋ ์ฌ์ค์ ์ด์ฉํ๋ ๊ฒ์ด์๋ค. ์ฒ์ ์๊ฐํ ๋ฐฉ์์ 1๋ฒ์ ์ต๋ 2์ต ๊ฐ์ ์๋ฅผ ๋ชจ๋ ๋ฃ์ด์ผ ํด์ ์๊ฐ์ด ๋ง์ด ์์๋๋ค. ๋ถ๋ฆฐ ๋ฐฐ์ด์ false ๋ก ์ด๊ธฐํ๋๋, ์ ์ธ๋ง ํ ํ 2์ต๊ฐ ๋ชจ๋์ ์ํ๋ฅผ ๋ณ๊ฒฝํ ํ์ ์์ด stations ์ ์๋ ๊ธฐ์ง๊ตญ ์ ๋ณด๋ฅผ ํ์ฉํด์ ์ด๋ฏธ ์ ํ๊ฐ ์ ๋ฌ๋๊ณ ์๋ ์ํํธ๋ค์ ์ํ๋ง true ๋ก ๋ฐ๊พธ์ด์ฃผ๋ฉด false / true ๋ก ๊ฐ ์ํํธ๋ณ ์ ํ ์ ๋ฌ์ด ํ์ ์ฌ๋ถ๋ฅผ ํ์ ํ ์ ์๋ ๋ฐฐ์ด์ด ๋ง๋ค์ด์ง ๊ฒ์ด๋ค. ์ ํ๊ฐ ์ ๋ฌ๋์ง ์๊ณ ์๋ ์ํํธ๋ค์ด ์์นํ ์ธ๋ฑ์ค์ ์์๋ ์ด๊ธฐ์ false ๋ก ๋จ๊ณ , ๋ฐ๋๋ true ๋ก ๋ฐฐ์ด์ ์ ์ฅ๋๊ธฐ ๋๋ฌธ์ด๋ค. ๋ฐ๋ก ์คํ์ ์ฎ๊ฒผ๋ค:
boolean[] onOrOff = new boolean[N]; // false ๋ก ์ด๊ธฐํ ๋๋ค. ๋ชจ๋ ์ ํ๊ฐ ๋ฟ์ง ์๋ ์ํฉ์ ์ด๊ธฐ ์ํ๋ฅผ ๋ฐฐ์ด๋ก ํํํ๋ค.
/* stations ์ ์ ๋ณด์ ๋ฐ๋ผ ์ ํ๊ฐ ๋ฟ๋ ์ํํธ๋ค์ ์ ๋ณด๊ฐ ์
๋ฐ์ดํธ๋๋ค. */
for (int station : stations) {
for (int j = station - W; j <= station + W; j++) {
if (j > N || j < 1) continue;
onOrOff[j - 1] = true;
}
}
N = 11, stations = [4, 11], W = 1 ์ผ ๋ onOrOff ๋ฐฐ์ด์ ์ถ๋ ฅํ๋ฉด ์๋์ ๊ฐ๋ค:
[false, false, true, true, true, false, false, false, false, true, true]
์ด๋ก์จ onOrOff ๋ฐฐ์ด์๋ ์ํํธ๋ค์ ์ ํ ์ ๋ฌ ์ฌ๋ถ์ ๋ํ ์ ๋ณด๊ฐ ๋ถ๋ฆฐ ๊ฐ์ผ๋ก ์ ์ฅ๋๊ฒ ๋์๋ค. ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ค ๋ณด๋๊น false ๊ฐ ์ฐ์์ผ๋ก ๋์ค๋ ๊ตฌ๊ฐ๋ค์ด ๊ฒฐ๊ตญ ๊ธฐ์ง๊ตญ์ ๋ช ๊ฐ ์ค์นํด์ผ ํ๋์ง๋ฅผ ๊ฒฐ์ ์ง๋๋ค๋ ๊ฒฐ๋ก ์ด ๋ด๋ ค์ก๋ค. ๊ทธ ์ด์ ๋ false, ์ฆ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์๊ณ ์๋ ์ํํธ๋ค์ด ๋ชจ์ฌ ์๋ ๊ตฌ๊ฐ์๋ ํญ์ ๊ธฐ์ง๊ตญ์ ์ต์ 1๊ฐ๋ ์ค์นํด์ผ ํ ๊ฒ์ด๊ณ , ์ ํํ ๋ช ๊ฐ ์ค์นํด์ผ ํ๋์ง๋ ๋ชจ์ฌ ์๋ ์ํํธ๋ค์ ๊ฐ์, ์ฆ ์ฌ๊ธฐ์๋ false ๊ฐ ์ฐ์์ผ๋ก ๋์ค๋ ๊ตฌ๊ฐ์ ๋ช ๊ฐ์ false ๊ฐ ์๋์ง์ ๋ฐ๋ผ ๋ฌ๋ผ์ง๊ธฐ ๋๋ฌธ์ด๋ค. ์ฝ๊ฒ ์๋ฅผ ๋ค์ด ์ค๋ช ํ๊ฒ ๋ค:
- false ์ฐ์ 4 ๊ฐ, W = 1 ์ผ ๋: ๊ธฐ์ง๊ตญ์ 2๊ฐ ์ค์นํด์ผ ํ๋ค. ์์์ ์ ์ ์ค๋ช ํ๋ฏ์ด W ๊ฐ 1์ด๋ฉด 3๊ฐ์ ์ํํธ๋ฅผ ์ปค๋ฒํ ์ ์๋ค. ๊ทผ๋ฐ ์ ํ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ํํธ๋ 4๊ฐ์ด๋ฏ๋ก 1๊ฐ๋ก๋ ๋ชจ์๋ผ๊ณ ์ต์ 2๊ฐ๋ ์ค์นํด์ผ ๋๊ฒ ๋๋ค.
- false ์ฐ์ 2๊ฐ, W = 1 ์ผ ๋, ๊ธฐ์ง๊ตญ์ 1๊ฐ๋ง ์ค์นํ๋ฉด ๋๋ค. W = 1 ์ผ ๋ ์ต๋ 3๊ฐ๋ฅผ ์ปค๋ฒํ ์ ์์ผ๋ฏ๋ก.
์ฌ์ค ์ด ์์๋ ์์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ๋์์ผ๋ก ๋ ์์ด๋ค. ์ค์ N = 11, stations = [4, 11], W = 1์ผ ๋ ์ค์นํด์ผ ํ๋ ์ต์ ๊ธฐ์ง๊ตญ์ ๊ฐ์๋ ์์์์ ํ์ ํ fasle ์ฐ์ ๊ตฌ๊ฐ์ ํ์ํ ๊ธฐ์ง๊ตญ ์ค์น ๊ฐ์๋ค์ ํฉ์ธ 2 + 1 = 3 ๊ฐ์ด๋ค.
์ฌ๊ธฐ๊น์ง์ ์๊ฐ์ ๋ง์น ํ, ํด์ผ ํ ์ผ์ด ๋ช ํํด์ก๋ค. ๋ฐ๋ก false ๊ฐ ์ฐ์์ผ๋ก ๋์ค๋ ๊ตฌ๊ฐ๋ค ๊ฐ๊ฐ์ false ๊ฐ์๋ฅผ ํ์ ํด์ ์ซ์ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ์ ์ ์ฅํ๋ ์ผ์ด์๋ค. ์์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ก๋ถํฐ ๋ฐฐ์ด์ด๋ ๋ฆฌ์คํธ๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ๋ค:
[2, 4]
false ๊ฐ ์ฐ์์ผ๋ก 2 ๊ฐ ๋์จ ์ดํ true ๊ฐ ๋์ค๊ณ ๋ค์์ผ๋ก 4 ๊ฐ์ false ๊ฐ ์ฐ์์ผ๋ก ๋ฑ์ฅํ๊ธฐ ๋๋ฌธ์ด๋ค.
์ด๋ฌํ ๋ฆฌ์คํธ / ๋ฐฐ์ด์ ์์ฑํ๋ ์ฝ๋๋ฅผ ์ง๋ณด์๋ค:
int count = 0;
int idx = 0;
for (int i = 0; i < onOrOff.length; i++) {
idx = i;
while (idx < N && !onOrOff[idx]) {
count++;
idx++;
}
if (count > 0) {
numOfFs.add(count);
count = 0;
i = idx;
}
}
์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํด์ !onOrOff[idx], ์ฆ false ๋ฅผ ๋ฐ๊ฒฌํ์ ๋, ๋ฐ๊ฒฌ๋ ์์น์ ์ธ๋ฑ์ค๋ฅผ ์์์ผ๋ก ์ดํ ์์๋ค์ด ๊ณ์ false ์ธ ํ (false ์ ์ฐ์ ๊ตฌ๊ฐ, while ๋ฌธ์ผ๋ก ์ฐ์ ๊ตฌ๊ฐ์ ๊ณ์ ํ์ํ๋ค.) count ๋ฅผ ์ฆ๊ฐ์์ผ์ false ์ ์ฐ์ ๊ตฌ๊ฐ๋ง๋ค false ๊ฐ ๋ช ๊ฐ๊ฐ ์๋์ง๋ฅผ ์ผ๋ค. ์๋ if ๋ฌธ์ count ์ ๋ณํ๊ฐ ์์ ๋, ์ฆ ์ฐ์ ๊ตฌ๊ฐ์ด ๋ฐ๊ฒฌ๋์์ ๋ (์์ง ๋ง์, false ๊ฐ ํ๋๋ง ๋์ค๊ณ ๋ฉ์ถฐ๋ ์ฐ์ ๊ตฌ๊ฐ์ด๋ค) ์ฐ์ ๊ตฌ๊ฐ ๋ด์ false ๋ฅผ ์ผ count ๋ฅผ numOfFs ๋ฆฌ์คํธ์ ์ ์ฅํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ค์ ์ฐ์ ๊ตฌ๊ฐ์ด ๋์์ ๋ false ๋ฅผ ๋ค์ ์ธ๊ธฐ ์ํด count ๋ฅผ 0์ผ๋ก ์ด๊ธฐํ์ํจ๋ค. ๊ทธ๋๋ idx ๋ฅผ i ์ ํ ๋นํจ์ผ๋ก์ ๋ค์ ๋ฐ๋ณต์์๋ false์ ์ฐ์ ๊ตฌ๊ฐ์ด ๋๋ ์ง์ ์ ๋ค์ ์ง์ ๋ถํฐ (while ๋ฌธ์์ idx ๋ฅผ ํ๋ ์ฆ๊ฐ์ํค๊ณ ๋์ค๊ธฐ ๋๋ฌธ์ ๋ค์ ์ง์ ์ด๋ค) ํ์์ ์งํํ๋๋ก ํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์ค์ฒฉ๋ ๋ฐ๋ณต๋ฌธ์ ๋ชจ๋ onOrOff ์ ์์๋ค์ ๋ํด์ ๋๊ณ ๋๋ฉด, ๊ฐ ์ฐ์๋ false ๊ตฌ๊ฐ ๋ด์ false ์ ๊ฐ์๊ฐ ๊ตฌ๊ฐ์ ๋ฑ์ฅ ์์๋๋ก ์ฐจ๋ก๋๋ก numOfFs ์ ์ ์ฅ๋์ด ์๋ค:
numOfFs = [2, 4]
์ด๋ ๊ฒ false์ ๊ฐ ์ฐ์ ๊ตฌ๊ฐ์์์ ๊ฐ์๋ฅผ ํ์ ํ๊ณ ๋๋๊น ๋ฌธ์ ์ ์ค๋ง๋ฆฌ๊ฐ ๋ณด์๋ค. ์ฌ๊ธฐ์ ๊ธฐ์ง๊ตญ์ด ์ต์ ๋ช ๊ฐ๊ฐ ํ์ํ์ง๋ฅผ ๊ตฌํ๋ ์ผ์ ์ด๋ ต์ง ์์๋ค. ๋จผ์ W ์ ๋ฐ๋ผ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์๋ ์ํํธ์ ๊ฐ์๋ฅผ ๊ณต์์ผ๋ก ๋ํ๋ด๋ณด์๋ค:
1 + (2 * W)
์์ ๊ณต์์ ํด์ํ์๋ฉด ๋ค์๊ณผ ๊ฐ๋ค - ์ํํธ ์์ (1) ๊ณผ(+) ์์ชฝ (2) ์ ํผ์ง๋ (*) ์ ํ ๋ฒ์(W)
๊ธฐ์ง๊ตญ์ ํ ๋ ์ค์นํ ๋ 1 + (2 * W) ๋งํผ์ ์ํํธ์ ์ ํ๊ฐ ์ ๋ฌ๋๋ฉฐ ๋ ๊ฐ์ง ์ํฉ์ด ์์ ์ ์๋ค๋ ๊ฒฐ๋ก ์ ๋๋ฌํ๋ค:
- ๊ฐ๋ฅํ ๋ฒ์๋ณด๋ค ๋ ๋์ ๋ฒ์ ๋ด์ ์ํํธ๋ค์ ์ ํ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ํฉ
- ๊ฐ๋ฅํ ๋ฒ์๋ณด๋ค ์ ์ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํด์ผ ํ๋ ์ํฉ
2๋ฒ ์ํฉ์ 1๋์ ๊ธฐ์ง๊ตญ์ผ๋ก ๋ชจ๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋๋ ์ํฉ์ด๋ค. 1๋ฒ ์ํฉ์ ์ด๋จ๊น? 1๋ฒ ์ํฉ์ ๋ ๋ ๊ฐ๋๋ก ๋๋๋ค:
- ๊ธฐ์ง๊ตญ์ ์ค์นํด ์ ํ๋ฅผ ์ ๋ฌํ ํ์ ๊ธฐ์ง๊ตญ๋ ๋ชจ๋ ๊ฐ๋ฅํ ๋ฒ์๋ฅผ ์ฌ์ฉํ๊ณ ๋จ์ ์ํํธ๋ ์๋ ์ํฉ, ์ฆ ๊ฐ๋ฅํ ๋ฒ์์ ๋ฐฐ์๋งํผ์ ์ํํธ๊ฐ ์๋ ์ํฉ
- ๊ธฐ์ง๊ตญ n ๋๋ฅผ ์ค์นํ๋๋ฐ ๊ธฐ์ง๊ตญ์ ๊ฐ๋ฅ ๋ฒ์๋ฅผ ๋ฑ ๋จ์ด์ง๊ฒ ์ฌ์ฉํ์ง ๋ชปํ๊ณ ๊ฐ๋ฅํ ๋ฒ์๋ณด๋ค ์์ ๋งํผ์ ์ํํธ ๊ฐ์๊ฐ ๋จ๋ ์ํฉ, ์ฆ ๊ฐ๋ฅํ ๋ฒ์์ ๋ฐฐ์ + ๋๋จธ์ง ์ ์ํํธ ๊ฐ์์ธ ์ํฉ
์ฌ๊ธฐ๊น์ง ๋ ผ๋ฆฌ๋ฅผ ์ ๊ฐํ๋๊น ๋๋์ (/) ๊ณผ ๋ชจ๋๋ก (%) ์ฐ์ฐ์ ์ฌ์ฉํด์ผ ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์๋์ฒ๋ผ ํํํ ์ ์๋ค:
- A (์ ํ ์ ๋ฌํ ์ํํธ ๊ฐ์, false ์ฐ์ ๊ตฌ๊ฐ์์ false์ ๊ฐ์) > (1 + (2 * W))
- A % (1 + (2 * W)) == 0
- A % (1 + 2 * W) > 0
- A < (1 + (2 * W))
๊ทธ๋ฆฌ๊ณ ์ด ์ธ ๊ฐ์ง ์ํฉ ๊ฐ๊ฐ์์ ํ์ํ ๊ธฐ์ง๊ตญ์ ๊ฐ์๋ ์๋์ ๊ฐ๋ค:
- A / (1 + (2 * W)) - ๋๋์ด ๋จ์ด์ง๋ค๋ ์๋ฏธ๋ ์ ํํ๊ฒ ์ํํธ ๊ฐ์๋ฅผ ๊ฐ๋ฅ ๋ฒ์๋ก ๋๋์์ ๋์ ๋ชซ ๋งํผ์ ๊ธฐ์ง๊ตญ์ด ํ์ํ๋ค๋ ์ด์ผ๊ธฐ์ด๋ค.
- (A / (1 + (2 * W))) + 1 - ๋๋จธ์ง๊ฐ ์์ผ๋ฏ๋ก ๊ฐ๋ฅ ๋ฒ์๋ก ์ปค๋ฒํ ์ ์๋ ์ํํธ ๊ฐ์๋งํผ์ด ๋จ๋๋ค๋ ๊ฒ์ด๋ค. ๊ทธ๋์ ๊ธฐ์ง๊ตญ 1๊ฐ๋ฅผ ์ถ๊ฐ์ ์ผ๋ก ์ค์นํด์ผ ํ๋ค.
- 1 - ๋จ 1๊ฐ์ ๊ธฐ์ง๊ตญ์ผ๋ก ์ปค๋ฒํ ์ ์๋ค. A ์๋ ์์ ์ ์๋ง ํด๋น๋๋ค๊ณ ๊ฐ์ ํ๋ค. ์ค์ ๋ก ์ฐ์ ๊ตฌ๊ฐ์ ํ์ ํ ๋๋ false ๊ฐ 1๊ฐ ์ด์์ผ ๋๋ง ์ธ๊ธฐ๋ฅผ ์์ํ๋ค.
์ด๋ฅผ ๋ฐํ์ผ๋ก ์ฝ๋๋ฅผ ์งฐ๋ค. numOfFs ์ ์ ์ฅ๋ ๊ฐ false ์ฐ์ ๊ตฌ๊ฐ์์์ false ์ ๊ฐ์ ๊ฐ๊ฐ์ ๋์์ผ๋ก ์์ ๊ธฐ์ง๊ตญ ํ์ ๊ณต์์ ์ ์ฉํ ํ ๋ชจ๋ ๋ํด์ ์ด ํ์ํ ์ต์ ๊ธฐ์ง๊ตญ์ ๊ฐ์๋ฅผ ๊ตฌํ๋ค:
int countMin = 0;
for (int countF : numOfFs) {
if (countF % ((W * 2) + 1) == 0) {
countMin += countF / ((W * 2) + 1);
continue;
}
countMin += (countF / ((W * 2) + 1)) + 1;
}
์ 2๋ฒ ์ํฉ์ด ์ ๋ณด์ด๋๋ฉด ์ด์ฐจํผ countF < ((W * 2) + 1)) ์ธ ์ํฉ์์๋ countF ๋ฅผ ๊ฐ๋ฅ ๋ฒ์๋ก ๋๋๋ฉด ๋ชซ์ด 0์ด ๋์ค๊ณ 1์ ๋ํ๋ฉด 1์ด ๋๊ธฐ ๋๋ฌธ์ countMin += (countF / ((W * 2) + 1)) + 1; ์์ ๊ธฐ์ง๊ตญ 1๊ฐ๊ฐ ํ์ํ๋ค๋ ์ฌ์ค์ ํ์ ํด ๋ํ๊ฒ ๋์ด์ ๋ฐ๋ก ๋ช ์ํ ํ์๊ฐ ์์๋ค. ๊ฒฐ๊ตญ ๋ชซ์ด 0์ธ ์ํฉ์ ์ด์ฉํ๋ฉด 1-1๊ณผ 1-2 ์ํฉ๋ง ์ฝ๋๋ก ์ง๋ ๋๋ค.
์ด๋ ๊ฒ ํด์ ์ฝ๋๊ฐ ์์ฑ๋์๋ค. ๋ ๋ฒ์งธ ์๋์์ ๋์ ์ฝ๋๋ ์๋์ ๊ฐ์๋ค:
public int completeSpread(int N, int[] stations, int W) {
boolean[] onOrOff = new boolean[N]; // false ๋ก ์ด๊ธฐํ ๋๋ค. ๋ชจ๋ ์ ํ๊ฐ ๋ฟ์ง ์๋ ์ํฉ์ ์ด๊ธฐ ์ํ๋ฅผ ๋ฐฐ์ด๋ก ํํํ๋ค.
/* stations ์ ์ ๋ณด์ ๋ฐ๋ผ ์ ํ๊ฐ ๋ฟ๋ ์ํํธ๋ค์ ์ ๋ณด๊ฐ ์
๋ฐ์ดํธ๋๋ค. */
for (int station : stations) {
for (int j = station - W; j <= station + W; j++) {
if (j > N || j < 1) continue;
onOrOff[j - 1] = true;
}
}
List<Integer> numOfFs = new ArrayList<>(); // ์ฐ์ ๊ตฌ๊ฐ์ ๋์ฌ ์๋ false ์ ๊ฐ์๋ค์ ์ผํ๋ก ๋ถ๋ฆฌํด์ ์ ์ฅํ๋ค.
int count = 0;
int idx = 0;
for (int i = 0; i < onOrOff.length; i++) {
idx = i;
while (idx < N && !onOrOff[idx]) {
count++;
idx++;
}
if (count > 0) {
numOfFs.add(count);
count = 0;
i = idx;
}
}
int countMin = 0;
for (int countF : numOfFs) {
if (countF % ((W * 2) + 1) == 0) {
countMin += countF / ((W * 2) + 1);
continue;
}
countMin += (countF / ((W * 2) + 1)) + 1;
}
return countMin;
}
์ ํ๋๋ 100ํ๋ก, ํจ์จ์ฑ์ ๋นต์ ์ด์๋ค:
๐ ๋ง์ง๋ง ์๋, ์ด๋ ๊ฒ ๊ฐ๊ฒฐํ๊ฒ ์งค ์ ์๋ค๊ณ ?
์ ํ์ฑ์ด 100์ ์ด์์ผ๋ฏ๋ก, ๋ ์ด์ ๋ ผ๋ฆฌ๋ ๊ฑด๋๋ฆฌ์ง ์๊ธฐ๋ก ํ๋ค. ์ฌ์ค ํจ์จ์ฑ ํ ์คํธ๋ฅผ ํต๊ณผํ์ง ๋ชปํ๋ ์ด์ ๋ ๋ถ๋ณด๋ฏ ๋ปํ๋ค. ๋ฐ๋ก ์ด์ค ๋ฐ๋ณต๋ฌธ๋ค์ ๋ ๊ตฐ๋ฐ์์๋ ์ฌ์ฉํ๊ณ ์์๊ธฐ ๋๋ฌธ์ด๋ค. ์ด๋ป๊ฒ ํด์ผ ์ด์ค ๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ์ง ์์ ์ ์์์ง ๊ณ ๋ฏผํ๋ค๊ฐ false ์ด๊ธฐํ๋ฅผ ์ด์ฉํด์ ๊ธธ์ด N ์ ๋ฐฐ์ด์ ์ํํธ์ ์ ํ ์ ๋ฌ ์ฌ๋ถ๋ฅผ ๋ด๋ ๋ฐฉ์์ด ์ฌ์ค ์๋์ false ๊ฐ ์ฐ์์ผ๋ก ๋์ค๋ ๊ตฌ๊ฐ์ ํ์ ํ๊ธฐ ์ํ ์ค๋น ๋จ๊ณ์ ๋ถ๊ณผํ๋ค๋ ์ฌ์ค์ ๋ฐ๊ฒฌํ๋ค. ์ํ๋ฅผ ๋ํ๋ด๋ ๋ถ๋ฆฐ ๋ฐฐ์ด์ ๋ง๋ค์ง ์๊ณ ๋ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์๋ ์ํํธ๋ค์ ์ฐ์ ๊ตฌ๊ฐ๊ณผ ๊ตฌ๊ฐ ๋ด ์ํํธ๋ค์ ๊ฐ์๋ฅผ ๊ตฌํ ์ ์์๊น? ๋ฅผ ์๊ฐํด๋ณด์๋ค.
๊ฒฐ๋ก ๋ถํฐ ๋งํ์๋ฉด, ๊ฐ๋ฅํ๋ค. false ์ฐ์ ๊ตฌ๊ฐ์ true ์ ์์น์ ๊น์ ๊ด๋ จ์ด ์์๋ค. ํ์ฌ ์ ํ ์ ๋ฌ์ด ๋๊ณ ์๋ ์ํํธ๋ค์ ์์น๋ฅผ ์๋ฉด, ์ ํ ์ ๋ฌ์ด ์๋๋ ์์น๋ ์ ์ ์์๋ค. ๊ตฌ๊ฐ์ ๋ชจ๋ฅด์ง ์๋๊ณ ? ์๋๋ค. ์ ํ ์ ๋ฌ์ด ๋๊ณ ์๋ ์ํํธ๋ค์ ์ฐ์ ๊ตฌ๊ฐ์ ์๋ฉด ์์ฐ์ค๋ฝ๊ฒ ๊ทธ ๋ฐ๋์ธ ์ ํ ์ ๋ฌ์ด ์๋๊ณ ์๋ ์ํํธ๋ค์ ์ฐ์ ๊ตฌ๊ฐ์ ์ ์ ์๋ค. ๋ ๊ตฌ๊ฐ๋ค์ ์ฐ๊ด์ฑ์ ์ฝ๋๋ก ์ ๋ฆฝํ๊ธฐ ์ํด ๊ณ ๋ฏผ์ ํ๊ธฐ ์์ํ๋ค.
stations ๋ ์ค๋ฆ์ฐจ์ ์ ๋ ฌ์ด ๋์ด ์๋ค. ์ฆ, stations ์ ์ฒซ ๋ฒ์งธ ์์๋ ํญ์ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ๋ค ์ค ๊ฐ์ฅ ์์ ๋ฒํธ๋ฅผ ๊ฐ์ง ์ํํธ, ์ฆ ๋งจ ์ ๊ฐ์์์์ ๊ทธ๋ฆผ์ผ๋ก ๋ฐ์ง๋ฉด ๋งจ ์ผ์ชฝ์ ์ํํธ๋ฅผ ๊ฐ๋ฆฌํจ๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ์ฒซ ์ ํ ์ ๋ฌ์ด ์๋๋ ๊ตฌ๊ฐ์ด 1 ๋ถํฐ <stations ์ ์ฒซ ๋ฒ์งธ ์์> - <์ผ์ชฝ์ผ๋ก์ ์ ํ ์ ๋ฌ ๊ฐ๋ฅ ๋ฒ์> (์ผ์ชฝ ์ค๋ฅธ์ชฝ ๋์ผํ๊ฒ W์ด๋ค.) ์์ ์ถ๋ก ํ ์ ์๋ค. ๋ฌผ๋ก <stations ์ ์ฒซ ๋ฒ์งธ ์์> - <์ผ์ชฝ์ผ๋ก์ ์ ํ ์ ๋ฌ ๊ฐ๋ฅ ๋ฒ์> ๊ฐ 2 ์ด์์ผ ๋์ ์ด์ผ๊ธฐ์ด๋ค. ๋ง์ฝ 1 ์ดํ์ด๋ฉด ์ํํธ 1๋ฒ์ผ๋ก ์์ํ๋ ์ ํ ์ ๋ฌ์ด ๋์ง ์๋ ์ฐ์ ๊ตฌ๊ฐ์ ์กด์ฌํ์ง ์๋๋ค. ์ฐ๋ฆฌ๊ฐ ์์์ผ ํ ๊ฒ์ ์ฐ์ ๊ตฌ๊ฐ ๋ด์ ๋ช ๊ฐ์ ์ํํธ๊ฐ ์๋์ง์ด๋ค. 1๋ถํฐ ์์ํ๋ ์ฐ์ ๊ตฌ๊ฐ ๋ด์ ์ํํธ ๊ฐ์๋ฅผ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค:
(stations[0] - W) - 1 - 1
1์ ํ๋ฒ ๋ ๋นผ์ฃผ๋ ์ด์ ๋ stations[0] - W ๋ ์ ํ๊ฐ ์ ๋ฌ๋๋ ์ํํธ์ด๋ฏ๋ก ํฌํจํ์ง ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ข ๋ ์ผ๋ฐํํ์๋ฉด, ์์์ ์ฐ๋ฆฌ๊ฐ ์๊ณ ์ถ์ ๊ฒ์ true ๊ฐ ๋๋๋ ์์ ๋ถํฐ ๋ค์ true ๊ฐ ๋์ค๋ ์์ ์ฌ์ด์ false ๊ฐ ๋ช ๊ฐ๋ ์กด์ฌํ๋๋ ์๋ค. ์์ ๊ณต์์ ๋งจ ์๋ถํฐ ๊ฐ์๋ฅผ ์ธ๋ ๊ฒ์ true ๊ฐ ๋๋๋ ์์ ์ด๋ ์๊ด์ด ์๊ธฐ ๋๋ฌธ์ 1๊ณผ stations[0] - W ์ฌ์ด์ ๋ช ๊ฐ์ ์ํํธ๊ฐ ์๋์ง๋ฅผ ๊ณ์ฐํ์ง๋ง, ์ดํ์๋ (๋งจ ๋ค๋ฅผ ์ ์ธํ๊ณ ) ๋ชจ๋ ์ด์ true ๊ฐ ๋๋ ์์ ๊ณผ stations[0] - W ์ฌ์ด์ ๋ช ๊ฐ์ ์ํํธ๊ฐ ์๋์ง๋ฅผ ๊ณ์ฐํ ๊ฒ์ด๋ค. ๋งจ ๋ค์์๋ ๋ ๋ค๋ฅธ ์ํฉ์ด ํผ์ณ์ง๋๋ฐ, ์ด๋ ์ข ์๋ค ์ค๋ช ํ๊ฒ ๋ค.
๊ทธ๋์ ๊ณ์ true ๊ฐ ๋๋๋ ์์ ์ ์ถ์ ํ ํ์๊ฐ ์๋ค. ๋ณ์๋ฅผ ํ๋ ์ ์ธํด์ฃผ๊ณ , ์ด๋ฆ์ ptrToTrueOccurrence ๋ผ๊ณ ์ง์๋ค. ๋์ถฉ true ๊ฐ ์ต๊ทผ ๋ง์ง๋ง์ผ๋ก ๋ํ๋ฌ๋ ์์น๋ฅผ ๊ฐ๋ฆฌํค๋ ํฌ์ธํฐ ๋ณ์๋ผ๋ ์๋ฏธ์ด๋ค.
์ข ๋ ์๊ฐํด๋ณด๋ฉด, ptrToTrueOccurence ๋ ๊ฐ์ฅ ์ฒ์์๋ 0์ด๊ฒ ์ง๋ง (๊ฐ์ฅ ์ฒ์์๋ ์ํํธ 0๋ฒ์งธ์ true ๊ฐ ๋ํ๋ฌ๋ค๊ณ ๊ฐ์ ํด๋ ๋๋ค. ๊ทธ๋ฌ๋ฉด 1๋ถํฐ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์์ ์ํํธ์ ๊ฐ์๋ฅผ ์ธ๊ฒ ๋๋ค) ์ดํ์๋ ์ง์ง ์ด์ true์ ์์น, ์ฆ ๋งค ๋ฐ๋ณต ์์ stations ์ ์๋ ์์์ W ๋ฅผ ๋ํ ๊ฐ์ด ๋๋ค. ๊ทธ ์ด์ ๋ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ์์ W ๋งํผ ์ ํ ์ ๋ฌ์ ์์ชฝ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ์ธ๋ฑ์ค๋ก ๋ฐ์ง๋ฉด ์ํํธ ๋ฒํธ stations[index] - W ๋ถํฐ stations[index] + W ๊น์ง ์ ํ ์ ๋ฌ์ด ๋ฟ๊ณ ๋ฉ์ถ๊ธฐ ๋๋ฌธ์ด๋ค. ์ฆ, ptrToTrueOccurrence ์๋ ๋งค๋ฒ stations[index] + W ๋ฅผ ํ ๋นํด์ฃผ๋ฉด ๋ค์ ๋ฐ๋ณต ์์ ์ด์ ์ ์ด๋์ true ๊ฐ ๋ฉ์ถ์๋์ง ์ ์ ์๊ณ , ์ ํํ๊ฒ false ์ ์ฐ์ ๊ตฌ๊ฐ์ ํ์ ํ ์ ์๊ฒ ๋๋ค.
์๊น ์ดํ์ ์ค๋ช ํ๊ฒ ๋ค๊ณ ํ ๋งจ ๋ค์์์ ์ํฉ์ ๋ณด์. ์ํํธ ๋ชฉ๋ก์ ๋งจ ๋ค๋ N ์ด๋ค. ์ํํธ N์ ๋ค๋ฅธ ์ํํธ์ stations[idx] - W ๊ฐ ๋ ์ ์๋ค. ๊ทธ๋์ stations ๋ด์ ๋ชจ๋ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ๋ฅผ ์ด์ฉํด ์ฐ์ ๊ตฌ๊ฐ ํ์ ์ ์๋ฃํ์ผ๋ฉด ๋ชจ๋ stations ์ ๋ง์ง๋ง ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ด์ ์ํํธ๋ค์ ์ฐ์ ๊ตฌ๊ฐ์ ํ์ ์ด ์๋ฃ๋ ๊ฒ์ด๋ฏ๋ก ๋ง์ง๋ง์ผ๋ก ๋ง์ง๋ง ๊ตฌ๊ฐ์ ํ์ ํด์ผ ํ๋ค. N ๊ณผ ptrToTrueOccurence ์ฌ์ด์ ๋ช ๊ฐ์ ์ํํธ๊ฐ ์๋์ง ์ถ๊ฐ์ ์ผ๋ก ํ์ ํ๋ฉด ๋๋ค.
์ด๋ ๊ฒ ๊ธ๋ก ์ฃผ์ ๋ฆฌ์ฃผ์ ๋ฆฌ ์ด ๋ด์ฉ์ ์ฝ๋๋ก ์์ฑํ๋ฉด ์๋์ ๊ฐ๋ค:
List<Integer> numOfFs = new ArrayList<>();
int ptrToTrueOccurrence = 0;
for (int i = 0; i < stations.length; i++) {
if (i == stations.length - 1 && N > stations[i] + W) {
numOfFs.add(N - (stations[i] + W));
}
int countFalse = (stations[i] - W - 1) - ptrToTrueOccurrence;
if (countFalse <= 0) {
ptrToTrueOccurrence = stations[i] + W;
continue;
}
numOfFs.add(countFalse);
ptrToTrueOccurrence = stations[i] + W;
}
stations ์ ์๋ ๋ชจ๋ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ์ ๋ฒํธ๋ค์ ๋ํด, ๋งจ ๋์ ๋๋ฌํ๊ณ ๋งจ ๋์ด ํ์ฌ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ๋ค๋ฅธ ์ํํธ์์ ์ปค๋ฒํ ์ ์๋ ๋ฒ์ ์์ ๋ค์ง ์์์ ๋์๋ ์ ํ ์ ๋ฌ์ด ํ์ํ ์ฐ์ ๊ตฌ๊ฐ์ ํ์ ํด์ผ ํ๋ ์ํฉ์ด๋ฏ๋ก N - (stations[i] + W), ์ฆ N์ ํฌํจํ (N์ ์ ํ ์ ๋ฌ์ด ์ ๋์์ผ๋ฏ๋ก) stations๊ฐ ์ปค๋ฒํ๋ ์ต๋์ ์ํํธ ๋ฒํธ์ N ์ฌ์ด์ ์ํํธ ๊ฐ์ ๋ฅผ ๊ณ์ฐํด์ numOfFs ์ ์ ์ฅํ๋ค.
๋งจ ๋์ ๋๋ฌํ๊ธฐ ์ ์๋ ์ด์ true ๊ฐ ๋ง์ง๋ง ๋ฑ์ฅํ ์์น์ ํ์ฌ ํ์ ์ค์ธ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ์ ์ ํ ์ ๋ฌ ๋ฒ์์์ ๊ฐ์ฅ ์ผ์ชฝ, ๊ฐ์ฅ ์์ ๋ฒํธ๋ฅผ ๊ฐ์ง ์ํํธ ์ ์์น ์ฌ์ด์ ๋ช ๊ฐ์ ์ํํธ๊ฐ ์๋์ง๋ฅผ countFalse ์ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ง์ฝ countFalse ๊ฐ ์์ ์ ์๊ฐ ์๋๋ผ๋ฉด, ์ฆ ์ํํธ๊ฐ 0๊ฐ ๋๋ ๊ทธ ์ดํ (์ดํ์ธ ๊ฒฝ์ฐ๋ ๊ธฐ์ง๊ตญ์ด ์ฐ์์ผ๋ก ์ค์น๋์ด ์๋ ์ํฉ์์ ๋ฐ์ํ๋ค.) ๋ผ๋ฉด ํ์ฌ ํ์ํ๋ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ์ ์ต๋ ์ ํ ์ ๋ฌ ๊ฐ๋ฅ ์์น๋ฅผ ptrToTrueOccurence ์ ์ ์ฅํ๊ณ (true ์ ๋ง์ง๋ง ์์น๊ฐ ๋ ๊ฒ์ด๋ฏ๋ก) ์ดํ์ ๋์์ ์๋ตํ๋ค.
์์ ์ ์๋ผ๋ฉด, countFalse ๊ฐ ํ์ ์ด ๋์์ผ๋ฏ๋ก (์ฐ์๋ ๊ตฌ๊ฐ์์์ ์ ํ ์ ๋ฌ์ด ํ์ํ ์ํํธ์ ๊ฐ์) ์ด๋ฅผ numOfFs ์ ์ ์ฅํ๊ณ ์ true ๊ฐ ๋๋ฌํ ์์น๋ฅผ ptrToTrueOccurence ์ ์ ์ฅํ๋ค.
๊ฒฐ๊ตญ ์ ์ฝ๋๋ numOfFs ์ ๋ชจ๋ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์์ ์ํํธ๋ค์ ์ฐ์ ๊ตฌ๊ฐ์์์ ์ํํธ๋ค์ ๊ฐ์๋ฅผ ์ ์ฅํ ๊ฒ์ด๋ค.
๋ ๋ฒ์งธ ์๋์์ false ์ true ๋ก ๊ตฌ์ฑ๋ ๋ฐฐ์ด์ ์ค์ฒฉ ๋ฐ๋ณต๋ฌธ์ผ๋ก ๋ง๋ค๊ณ ๋ ์ด์ค ๋ฐ๋ณต๋ฌธ์ผ๋ก ์ด ๋ฐฐ์ด์ ์๋ false ์ ์ฐ์ ๊ตฌ๊ฐ์์์ false์ ๊ฐ์๋ฅผ ์ธ๋ ๊ณผ์ ์ for ๋ฌธ ํ๋๋ก ๋์ฒดํ๋ค. ๊ฒฐ๊ณผ์ ์ผ๋ก ์์ฑ๋ ์ฝ๋๋ ์๋์ ๊ฐ๋ค:
public int solution(int N, int[] stations, int W) {
List<Integer> numOfFs = new ArrayList<>();
int ptrToTrueOccurrence = 0;
for (int i = 0; i < stations.length; i++) {
if (i == stations.length - 1 && N > stations[i] + W) {
numOfFs.add(N - (stations[i] + W));
}
int countFalse = (stations[i] - W - 1) - ptrToTrueOccurrence;
if (countFalse <= 0) {
ptrToTrueOccurrence = stations[i] + W;
continue;
}
numOfFs.add(countFalse);
ptrToTrueOccurrence = stations[i] + W;
}
int countMin = 0;
for (int countF : numOfFs) {
if (countF % ((W * 2) + 1) == 0) {
countMin += countF / ((W * 2) + 1);
continue;
}
countMin += (countF / ((W * 2) + 1)) + 1;
}
return countMin;
}
2์ค ๋ฐ๋ณต๋ฌธ ๋ ๊ฐ๋ฅผ ์์ ๋๊น ํจ์ฌ ์ฝ๋์ ๊ธธ์ด๊ฐ ์งง์์ก๋ค. ๋ํ ๊ฒฐ๊ณผ์ ์ผ๋ก ํจ์จ์ฑ ํ ์คํธ๋ฅผ ๋ชจ๋ ํต๊ณผํ๋ค.
Note
IDE ๋ก ์์ฑํ ๋ ๋ฉ์ธ ํจ์์์ ์คํ์ ์ฉ์ดํ๊ฒ ํ๊ธฐ ์ํด ๋ฉ์๋๋ฅผ ์คํํฑ์ผ๋ก ์์ฑํด๋๊ณ ๋ณต๋ถ์ ํ๋๊น ํ ๊ฐ์ ํจ์จ์ฑ ํ ์คํธ๊ฐ ์คํจํ๋ค. ํน์๋ ์คํํฑ์ผ๋ก ๋ฉ์๋์ ์ ๊ทผ ์ ์ด์๋ฅผ ์ค์ ํ ๊ฒ์ด ๋ฌธ์ ์๋ ์ถ์ด์ ์ง์ ๋๋ฐ ํจ์จ์ฑ ํ ์คํธ๋ฅผ ๋ชจ๋ ํต๊ณผํ๋ ๊ฒ์ ๋ณผ ์ ์์๋ค. ์คํํฑ ์ฌ์ฉ์ ์ฃผ์ํ์. ๐
๐ฉ ๊ฒฐ๋ก
๋ ๋ฒจ 3์ด๋ผ๊ณ ์ด๋ ต๋ค๊ณ ์๊ฐํ๊ธฐ ๋ณด๋ค๋ ์ฐจ๋ถํ๊ฒ ์ด๋ค ๋ฐฉ๋ฒ์ ์ฌ์ฉํ ์ ์์์ง ๊ณ ๋ฏผํ๊ณ , ํ ๋ฒ์ ํ๋ ค๊ณ ํ๊ธฐ๋ณด๋ค๋ ์ ์ง์ ์ผ๋ก ํ์ด๋ฅผ ๋ฐ์ ์ํค๋ ๋ฐฉ๋ฒ์ผ๋ก ๋ฌธ์ ๋ฅผ ํ์ด๋ ๋๋ค๋ ์ฌ์ค์ ๋ฐฐ์ ๋ค.
๐งถ ์ถ์ฒ
https://school.programmers.co.kr/learn/courses/30/lessons/12979
'Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[BOJ] 23294๋ฒ: ์น ๋ธ๋ผ์ฐ์ 1 Java ํ์ด (0) | 2023.09.11 |
---|---|
[Algorithms] ํ๋ก๊ทธ๋๋จธ์ค Level 2 ์์ ์ฐพ๊ธฐ (0) | 2023.06.26 |
[์๊ณ ๋ฆฌ์ฆ] Longest Common Subsequence(LCS) - 1๋ถ (0) | 2022.12.09 |
[์๊ณ ๋ฆฌ์ฆ] ํ๋ก๊ทธ๋๋จธ์ค - ๋์คํฌ ์ปจํธ๋กค๋ฌ 1๋ถ (1) | 2022.12.08 |
[์๊ณ ๋ฆฌ์ฆ] Dijkstra's algorithm 2๋ถ - ๊ตฌํ ์ค๋น (0) | 2022.12.05 |
- Total
- Today
- Yesterday
- ci/cd
- JPA
- gitlab
- Spring Boot
- docker
- spring
- Java Data Types
- N+1
- DeSerialization
- ์ค์๊ฐ๋ฐ์ดํฐ
- Jackson
- DTO
- JOIN FETCH
- json web token
- ์ง์ฐ ๋ก๋ฉ
- google cloud
- ์ฝํ
- ์ญ์ง๋ ฌํ
- ๊ธฐ์ง๊ตญ ์ค์น
- JPQL
- FCM
- LazyInitializationException
- Firebase
- ๊น๋ฉ
- ๋์ปค
- ํ๋ก๊ทธ๋๋จธ์ค
- ๊ฐ์ ์๋ฒ
- ์๊ณ ๋ฆฌ์ฆ
- @RequestBody
- ์ธ์ฆ/์ธ๊ฐ
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |