백준 1622 자바 - 공통 순열 (BOJ 1622 JAVA)
문제 : https://www.acmicpc.net/problem/1622 중요한건 2개의 문자열에서 각각의 문자열에 포함된 알파벳의 갯수이다. 예를들어 다음을 보자. S1 : accaab S2 : cccabbb S1은 a:3, b:1, c:2 S2는 a:1, b:3, c:3 이다. 이렇게 카운팅만 할 수 있다면, 사전순으로 가장 빠르면서 문제에서 제시된 출력은 a,b,c,d,...,z 까지 세어둔 수를 확인하면서 둘 중 작은 개수만큼 출력하면 된다. 위를 예로들면 a : 3과 1중 작은거, b : 1과 3중 작은거, c : 2와 3중 작은거. 따라서 a를 1번, b를 1번, c를 2번 출력하면 되므로 답은 abcc가 된다. 코드 : https://github.com/NaHwaSa/BOJ_BaekjunO..
2021. 11. 25.
백준 11969 자바 - Breed Counting (BOJ 11969 JAVA)
문제 : https://www.acmicpc.net/problem/11969 breed 1,2,3에 각각 범위 내에 포함된 카운팅값의 합을 출력하면 된다. prefix sum을 활용하면 풀 수 있다. breed1,2,3로 나누어서 카운팅한 값의 누적합을 저장하는 방식으로 진행하면 된다. 예제 입력1에 대해 그려보면 다음과 같다. N번 소에 대해 breed1,2,3를 사용했음을 기입한 것이다. 이걸 breed 1,2,3에 대해 각각 누적합을 구해보면 다음과 같다. 이렇게 전처리로 누적합을 구해두고, 각 쿼리의 a, b값에 대해 범위내의 합계를 출력해주면 된다. 예를들어 a=2, b=4라면 breed1의 경우 breed1[b] - breed1[a-1] = 2 - 0 = 2, breed2의 경우 마찬가지로 1..
2021. 11. 24.
백준 2912 자바 - 백설공주와 난쟁이 (BOJ 2912 JAVA)
문제 : https://www.acmicpc.net/problem/2912 1. 기본적인 아이디어는 각 쿼리의 [a, b] 구간에 대해 매번 [a, b] 전체를 확인하지 않고, 이전에 확인했던 구간과 겹치는 구간은 제외하고 확인하는 것이다. 예를들어 이전에 확인했던 구간이 [1, 100]이고 이번에 확인할 구간이 [4, 95]라고 해보자. 이 때, [1, 100] 구간을 전부 확인하면 100번 + [4, 95] 구간을 전부 확인하면 92번 봐야 한다. 그럼 192번 동작해야 한다. 하지만 [1, 100] 구간의 결과에서 [1, 3] 구간을 빼고, [96, 100] 구간을 빼면 [4, 95] 구간 전체를 본 것과 동일한 결과를 얻을 수 있다. 이 경우 108번만 동작하면 된다. 2. update가 없는 쿼..
2021. 11. 20.