알고리즘 26

[백준/Java] 2042 : 구간 합 구하기

https://www.acmicpc.net/problem/2042 이번 문제는 누적합 문제입니다. 누적합 문제의 풀이로는 2가지가 있습니다. 첫 번째는 누적합배열을 사용하는 것이고 두 번째는 세그먼트 트리를 사용하는 방법입니다. 이번에는 두 가지 알고리즘을 큰 차이점만 설명해보겠습니다. 누적합배열은 값이 변경되지 않을 때 효율적입니다. 하지만 값이 변경이 된다면 누적합배열을 다시 갱신해야 하고 변경이 여러번 된다면 시간복잡도가 O(배열길이 * 변경횟수) 이므로 시간초과를 가져올 수 있습니다. 이렇게 값이 변경이 자주 일어난다면 세그먼트 트리를 사용하면 됩니다.세그먼트 트리에서는 자신과 부모 노드만 갱신하여 루트까지 가는 방식으로 O(변경횟수 * log 배열길이)이면 가능합니다. 단점으로는 메모리를 더 사..

알고리즘 2025.02.17

[백준/Java] 9012 : 괄호

https://www.acmicpc.net/problem/9012 문자열을 끊어 받으면서 단순하게 '(' 가 들어오면 stack에 push해주고 ')' 가 들어오면 stack에 pop을 해주는데 stack이 비워져 있으면 'NO' 출력 후 반복문을 종료하면 된다. 반복문이 끝까지 돌았을 경우에는 stack의 사이즈를 가져와 0이면 'YES' 0이 아니면 '('가 ')' 보다 많은 경우 이기 때문에 'NO' 출력을 하면 된다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;public class Baekjoon_9012_괄호 { public static..

알고리즘 2025.02.16

[백준/Java] 10828 : 스택

https://www.acmicpc.net/problem/10828 입력값 중에서 4개는 하나의 단어로 이루어져있으므로 해당되면 다음 i로 넘어가도록 continue를 해놓고, 남은 한 가지의 경우에는 두 단어 이루어져있으므로 StringTokenizer로 받아서 문제를 풀이하였다. import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.util.Stack;import java.util.StringTokenizer;public class Baekjoon_10828_스택 { public static void main(String[] args) throws NumberFormatEx..

알고리즘 2025.02.16