2021. 11. 29. 18:53ใETC/Algorithm
๋ฌธ์ ์ค๋ช
N๊ฐ์ ์ํํธ๊ฐ ์ผ๋ ฌ๋ก ์ญ ๋์ด์ ์์ต๋๋ค. ์ด ์ค์์ ์ผ๋ถ ์ํํธ ์ฅ์์๋ 4g ๊ธฐ์ง๊ตญ์ด ์ค์น๋์ด ์์ต๋๋ค. ๊ธฐ์ ์ด ๋ฐ์ ํด 5g ์์๊ฐ ๋์์ ธ 4g ๊ธฐ์ง๊ตญ์ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๊พธ๋ ค ํฉ๋๋ค. ๊ทธ๋ฐ๋ฐ 5g ๊ธฐ์ง๊ตญ์ 4g ๊ธฐ์ง๊ตญ๋ณด๋ค ์ ๋ฌ ๋ฒ์๊ฐ ์ข์, 4g ๊ธฐ์ง๊ตญ์ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๊พธ๋ฉด ์ด๋ค ์ํํธ์๋ ์ ํ๊ฐ ๋๋ฌํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด 11๊ฐ์ ์ํํธ๊ฐ ์ญ ๋์ด์ ์๊ณ , [4, 11] ๋ฒ์งธ ์ํํธ ์ฅ์์๋ 4g ๊ธฐ์ง๊ตญ์ด ์ค์น๋์ด ์์ต๋๋ค. ๋ง์ฝ ์ด 4g ๊ธฐ์ง๊ตญ์ด ์ ํ ๋๋ฌ ๊ฑฐ๋ฆฌ๊ฐ 1์ธ 5g ๊ธฐ์ง๊ตญ์ผ๋ก ๋ฐ๋ ๊ฒฝ์ฐ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค. (์ ํ์ ๋๋ฌ ๊ฑฐ๋ฆฌ๊ฐ W์ผ ๋, ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ํ๋ฅผ ์์ชฝ์ผ๋ก W๋งํผ ์ ๋ฌํ ์ ์์ต๋๋ค.)
- ์ด๊ธฐ์, 1, 2, 6, 7, 8, 9๋ฒ์งธ ์ํํธ์๋ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์์ต๋๋ค.
- 1, 7, 9๋ฒ์งธ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ ๊ฒฝ์ฐ, ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
- 3๊ฐ์ ์ํํธ๋ณด๋ค ๋ ๋ง์ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ ๊ฒฝ์ฐ์๋ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ด๋, ์ฐ๋ฆฌ๋ ๊ธฐ์ง๊ตญ์ ์ต์๋ก ์ค์นํ๋ฉด์ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๋ ค๊ณ ํฉ๋๋ค. ์์ ์์์์ ์ต์ 3๊ฐ์ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํด์ผ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ํํธ์ ๊ฐ์ N, ํ์ฌ ๊ธฐ์ง๊ตญ์ด ์ค์น๋ ์ํํธ์ ๋ฒํธ๊ฐ ๋ด๊ธด 1์ฐจ์ ๋ฐฐ์ด stations, ์ ํ์ ๋๋ฌ ๊ฑฐ๋ฆฌ W๊ฐ ๋งค๊ฐ๋ณ์๋ก ์ฃผ์ด์ง ๋, ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ๊ธฐ ์ํด ์ฆ์คํด์ผ ํ ๊ธฐ์ง๊ตญ ๊ฐ์์ ์ต์๊ฐ์ ๋ฆฌํดํ๋ solution ํจ์๋ฅผ ์์ฑํด์ฃผ์ธ์
์ ํ์ฌํญ
- N: 200,000,000 ์ดํ์ ์์ฐ์
- stations์ ํฌ๊ธฐ: 10,000 ์ดํ์ ์์ฐ์
- stations๋ ์ค๋ฆ์ฐจ์์ผ๋ก ์ ๋ ฌ๋์ด ์๊ณ , ๋ฐฐ์ด์ ๋ด๊ธด ์๋ N๋ณด๋ค ๊ฐ๊ฑฐ๋ ์์ ์์ฐ์์ ๋๋ค.
- W: 10,000 ์ดํ์ ์์ฐ์
N | stations | W | answer |
11 | [4, 11] | 1 | 3 |
16 | [9] | 2 | 3 |
์ ์ถ๋ ฅ ์ #2
- ์ด๊ธฐ์, 1~6, 12~16๋ฒ์งธ ์ํํธ์๋ ์ ํ๊ฐ ์ ๋ฌ๋์ง ์์ต๋๋ค.
- 3, 6, 14๋ฒ์งธ ์ํํธ ์ฅ์์ ๊ธฐ์ง๊ตญ์ ์ค์นํ ๊ฒฝ์ฐ ๋ชจ๋ ์ํํธ์ ์ ํ๋ฅผ ์ ๋ฌํ ์ ์์ต๋๋ค.
๋ฌธ์ ํด๊ฒฐ
C++
int solution(int n, vector<int> stations, int w) {
int answer = 0, start = 1;
for (int i=0; i < stations.size(); i++) {
if (start < stations[i]-w)
answer += ceil(double((stations[i]-w) - start) / double(2*w+1));
start = stations[i]+w+1;
}
if (start < n+1) answer += ceil(double(n+1 - start) / double(2*w+1));
return answer;
}
Python
from math import ceil
def solution(n, stations, w):
answer = 0
start = 1
for i in range(len(stations)):
if start < stations[i]-w :
answer += ceil(((stations[i]-w) - start) / (2*w+1));
start = stations[i]+w+1;
if start < n+1: answer += ceil(((n+1) - start) / (2*w+1));
return answer
'ETC > Algorithm' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Programmers, ๋จ์ฒด์ฌ์ง ์ฐ๊ธฐ (0) | 2021.12.02 |
---|---|
Programmers, ์งํ ํธ์ง (0) | 2021.11.30 |
Programmers, ๋ฐฐ๋ฌ (0) | 2021.11.29 |
Programmers, ์์๋ง๋ค๊ธฐ (0) | 2021.11.27 |
[ํ๋ก๊ทธ๋๋จธ์ค] N ์ผ๋ก ํํ (0) | 2021.07.17 |
Backend Software Engineer
๐๐ฎ๐ง ยท ๐๐ฎ๐๐ค๐ฃ๐๐จ๐ช๐ฃ ๐๐๐ง๐