백준 2042번 구간 합 구하기
< 백준 2042번 구간 합 구하기 - 마포 코딩박 >
사용한 알고리즘: 세그트리
구간합을 구하는 문제였습니다. 저는 세그트리를 써서 해결하였습니다.
( Fenwick tree 나 기타 다른 방법으로도 구현이 가능합니다. )
문제풀이는 다음과 같습니다.
(1) (코드 4, 7)
N 이 최대 10^6 입니다.
Segtree 크기는 2 제곱으로 잡아줘야 합니다. ( node가 8개일때 생각하면 편합니다. )
2^20>10^6 이므로 노드개수가 2^20 개라 생각했습니다.
노드들을 쌓아올릴 2^20개가 추가로 필요하여 총 2*2^20 으로 배열 크기를 잡았습니다.
(2) (코드 22~30)
세그트리를 업데이트 (구성) 하는 코드입니다.
해당 index 를 바꿀 숫자로 바꾼 후 위에 쌓아올린 칸을 바꿔줍니다.
(3) (코드 8~20)
구간합을 구하는 코드입니다.
Segtree 의 Root 인 index=1 인 지점부터 차례로 보며 원하는 구간에 쏙 들어오는 index칸의 값을 구해줍니다.
세그트리가 한번에 생각이 어려우신 분들은 8개의 노드들을 쌓아올리는걸 그려보시면 편합니다. ( 저도 항상 8개 가지고 생각을 합니다. )
사용한 알고리즘: 세그트리
구간합을 구하는 문제였습니다. 저는 세그트리를 써서 해결하였습니다.
( Fenwick tree 나 기타 다른 방법으로도 구현이 가능합니다. )
문제풀이는 다음과 같습니다.
(1) (코드 4, 7)
N 이 최대 10^6 입니다.
Segtree 크기는 2 제곱으로 잡아줘야 합니다. ( node가 8개일때 생각하면 편합니다. )
2^20>10^6 이므로 노드개수가 2^20 개라 생각했습니다.
노드들을 쌓아올릴 2^20개가 추가로 필요하여 총 2*2^20 으로 배열 크기를 잡았습니다.
(2) (코드 22~30)
세그트리를 업데이트 (구성) 하는 코드입니다.
해당 index 를 바꿀 숫자로 바꾼 후 위에 쌓아올린 칸을 바꿔줍니다.
(3) (코드 8~20)
구간합을 구하는 코드입니다.
Segtree 의 Root 인 index=1 인 지점부터 차례로 보며 원하는 구간에 쏙 들어오는 index칸의 값을 구해줍니다.
세그트리가 한번에 생각이 어려우신 분들은 8개의 노드들을 쌓아올리는걸 그려보시면 편합니다. ( 저도 항상 8개 가지고 생각을 합니다. )
댓글
댓글 쓰기
긴 글 읽어주셔서 감사합니다.
궁금한게 있으시다면 댓글 달아주세요!