본문 바로가기

트리를 사용한 집합과 맵3

[백준] 2015: 수들의 합 4 - JAVA https://www.acmicpc.net/problem/2015 풀이주어진 수열에서 부분 수열의 합이 k가 되는 경우를 찾는 문제이다. 누적합과 맵을 이용해 해결했다. ```sum[i]```에서 k를 뺀 값이 이전에 등장한 적이 있는지를 확인한다. 현재 누적합이 ```sum[i]```라고 할 때, ```sum[i]-k```가 이전에 등장한 적 있다면 그 구간의 합이 k라는 것을 의미한다.  메모리: 33452KB시간: 348ms언어: Java 11import java.io.*;import java.util.*;public class Main { public static void main(String[] args) throws IOException { BufferedReader br =.. 2024. 6. 10.
[백준] 23883: 알고리즘 수업 - 선택 정렬 3 - JAVA https://www.acmicpc.net/problem/23883 풀이선택정렬은 O(n^2)의 시간복잡도를 갖기때문에 그대로 구현하면 시간초과가 났다. 따라서 정렬이 되는 TreeMap을 이용했다. TreeMap에 숫자와 처음 인덱스를 넣고 뒤에서 부터 꺼내면서 인덱스 교체가 필요할 경우 교체해주었다.  메모리: 122416KB시간: 1564ms언어: Java 11import java.util.*;import java.io.*;public class Main { static int[] arr; static int N, K, cnt, ans_a, ans_b; public static void main(String[] args) throws Exception { Buffered.. 2024. 5. 17.
[백준] 17255: N으로 만들기 - JAVA https://www.acmicpc.net/problem/17255 풀이어떤 수 N을 만들어야 하는데 두 가지 행동을 반복해서 만들어야 한다. 1. 수의 왼쪽에 숫자를 하나 적는다. 2. 수의 오른쪽에 숫자를 하나 적는다. 따라서, 숫자 N을 입력받을때 char 배열로 받아서 인덱스로 탐색하면서 시작위치를 정하고 dfs탐색을 했다. left와 right 인덱스를 기억하면서 left가 0, right가 길이-1이 되면 set자료구조에 넣었다. 나온 수를 순서대로 string으로 만들어 set자료구조에 넣었기 때문에 중복된 것이 제외되고 set의 size를 출력하면 경우의 수가 된다.  메모리: 17296KB시간: 216ms언어: Java 11import java.util.*;import java.io.*;.. 2024. 5. 17.