티스토리 뷰

Boj

[2017-10-04] Painting the Fence

jwvg0425 2017. 10. 4. 22:02

문제 링크 : https://www.acmicpc.net/problem/5858


1차원 선상에서 소가 좌우로 움직이는데 이 때 두 번 이상 방문한 칸의 개수가 몇 개인지 구하는 문제이다. 움직인 총 거리 상한이 10억으로 주어져 있기 때문에, 단순히 움직이는 걸 시뮬레이션하면서 따라가면 시간 초과가 난다.


 왼쪽, 오른쪽으로 이동 방향이 두 가지라 헷갈릴 수 있지만, 왼쪽으로 움직였든 오른쪽으로 움직였든 상관없이 특정 위치를 몇 번 방문했는지만 중요하기 때문에 모두 오른쪽으로 움직인 구간으로 생각하고 구간에 들어갈 때 +1, 나갈 때 -1로 배열을 기록해서 만들어 두면 쉽게 계산할 수 있다. 이 때 값이 바뀌는 양 끝 구간 개수는 최대 2N개 생기고, 이 위치를 저장하고 관리하기 위해 map등의 자료 구조를 써야하기 때문에 시간 복잡도는 O(NlogN)이 된다. 한 번 +1,-1구간을 만들어두면 2N개 위치를 맨 왼쪽부터 순회하면서 값을 누적하고, 합이 2이상인 개수만 세 주면 된다.



'Boj' 카테고리의 다른 글

[2017-10-06] Cow Beauty Pageant  (0) 2017.10.06
[2017-10-05] Adding Commas  (0) 2017.10.05
[2017-10-05] Bad Random Numbers  (0) 2017.10.05
[2017-10-05] Book Club  (0) 2017.10.05
[2017-10-04] Decision Tree  (0) 2017.10.04
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
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
글 보관함