알고리즘 338

[백준, 자바, 11286번] 절댓값 힙

풀이해당 문제는우선순위 큐 문제인데별도의 조건으로 정렬할 수 있을지 궁금했는데2차원 배열에서 sort 할 때 Comparator 사용해서인덱스 별 조건에 따라 정렬하는 것과 같이초기화 할 때 조건을 추가하니 가능하다는 것을 알게 됨. import java.io.*;import java.util.*;public class _11286 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); BufferedWriter bw = new BufferedWriter(new OutputStreamWri..

알고리즘 2024.11.25

[백준, 자바, 1992번] 쿼드트리

풀이해당 문제는 처음에 뭔가 했는데단순히 전체를 체크한 뒤 0과 1이 섞여 있다면사분면으로 나누는 분할과 확인을 거치는 정복에 관련한 문제다만 사분면의 범위를 지정하는데 잠시 이슈가 있었던게짝수로만 범위가 주어질때는 예를 들어si=0,ei=8,sj=0,ej=8,ln=8 이라고 할 때사분면을 나눌 때 그냥 절반으로 해서ei를 ei/2 이런식으로 하니까 길이가 1인 경우를 체크할 땐원하는 배열 탐색이 안되었다.그래서 수정한 건 시작과 끝을 더한 뒤 2를 나눈 값으로 지정하여 아래와 같이 작성 후 해결. import java.io.*;import java.util.StringTokenizer;public class _1992 { static int N; static String[][] mtx; ..

알고리즘 2024.11.25

[백준, 자바, 2740번] 행렬 곱셈

풀이해당 문제는 뭔가 손으로는 가능한데계속 머리가 멈춘것 처럼 해결 방법이 떠오르지 않아서고민해보다가 그냥 단순히 하나씩 적용해보다 풀림이러한 유형의 문제는 고민보단, 떠오르는 대로 먼저 시도해보는게아이디어가 나오기 좋은 행동이라는 것을 다시 확인해당 문제에선 기존 2차원 배열에서 탐색하는 방법을 거꾸로 해서행열 -> 열행 순서로 접근하는 형식으로 해결 import java.io.*;import java.util.Arrays;import java.util.StringTokenizer;public class _2740 { public static void main(String[] args) throws IOException{ BufferedReader br = new BufferedRea..

알고리즘 2024.11.22

[백준, 자바, 16139번] 인간-컴퓨터 상호작용

풀이처음 떠오른 방법이 아래 코드와 같은데왠지 효율상 이게 맞나?라는 의문이 있었지만우선 빨리 해결해보겠다는 마음으로 시도해본 결과생각보다 괜찮았는지 해결이 됨문자의 각 인덱스 별로 a-z까지를 카운팅할 2차원 배열을 만들고현재 배열에 이전 배열을 모두 복사한 뒤현재 문자의 인덱스에 1 증가하여 누적 배열을 만들고그에 따른 구간에 특정 알파벳을 구하여 해결  import java.io.*;import java.util.StringTokenizer;public class _16139 { public static void main(String[] args) throws IOException { BufferedReader br = new BufferedReader(new InputStream..

알고리즘 2024.11.22

[백준, 자바, 11660번] 구간 합 구하기 5

풀이어제 구간 합 유형 문제를 풀어서 그런지해결 방법이 쉽게 떠올랐음단순히 2차원 배열을 그냥 하나의 배열의 묶음으로 생각하고 각 배열을 누적하여 합한 다음원하는 구간의 합을 구하여 해결아래 주석은 배열 2개로기존 입력 값을 담은 배열과, 누적 합을 구한 배열 두개로 한 거고주석이 없는 코드는 하나의 배열로 해결한 코드 import java.io.*;import java.util.Arrays;import java.util.StringTokenizer;public class _11660 {// public static void main(String[] args) throws IOException {// BufferedReader br = new BufferedReader(new Input..

알고리즘 2024.11.22

[백준, 자바, 2559번] 수열 (누적 합)

풀이누적 합 관련 문제를 푼지 시간이 좀 지나서다시 해봤는데... 역시 알고보면 간단한데헤맬땐 왜 이렇게 복잡한지...그냥 단순히 누적 합을 구한 배열에서 특정 범위의 합이 알고 싶다면누적 합 배열의 현재 위치에서 따른 특정 거리의 위치의 값을 빼주면원하는 구간의 누적 합을 알 수 있다는 거...예를 들어 li = [0, 3, 1, -3, -12, -12, -9, -2, 11, 19, 16] 이렇게 누적 합을 구했다면 5일 차이의 경우에 3일 차라면 li[3-1+5]-li[3-1] 이렇게 해서 -3이 되는 것.3-1은 인덱스가 0부터 시작이기에 그럼그래서 아래와 같이 해결. // 1 방법import java.util.Scanner;public class Main { public static void..

알고리즘 2024.11.21

[백준, 자바, 9184번] 신나는 함수 실행

풀이분명히 답도 잘 나오고 하는데 무슨 문제가 있는지 한참 고민했던 문제..처음에는 뭔가 규칙을 찾아서 수학적으로 풀 수 있지 않을까 했는데뭔가 변동되는 것들이 많아서 DP를 사용하기로 함그런데 우선 DP를 어떻게 할까하고 생각해보다가그냥 찾고자 하는 값이 11,1,5 라고 했을 때 1115라는 문자로 변경 후 찾고 값을 넣어주면서 DP 값을 가져오도록 해서 해결했음그런데 출력도 문제 없고 무슨 문제일까 계속 찾아봐도 답이 안나옴.그래서 배열을 사용해서 해결하니까, 너무 쉽게 됨이후 다시 원래 해결 방법으로 풀고자 다시 생각해보니11, 1, 5 라고 할 때와 1, 11, 5와 1, 1, 15 같이 여러 개가 나올 수 있다는 것을 파악 후문자로 변경하는 함수에 별도의 작업을 해주니 해결...즉, 결론은 바..

알고리즘 2024.11.21

[백준, 자바, 14888번] 연산자 끼워넣기

풀이기존 재귀 방식에서 연산자를 활용하는 것으로처음엔 문제를 대충보고 수열도 모든 경우의 수에 대하여 적용하는 것인줄 알았는데수열은 고정이고 연산자만 무작위인 것을 확인하여 아래와 같이 해결 import java.io.*;import java.util.StringTokenizer;public class _14888 { static int N; static int[] li; static int[] cmd = new int[4]; static int[] result = {(int)Math.pow(10,9),-(int)Math.pow(10,9)}; public static void main(String[] args) throws IOException { BufferedR..

알고리즘 2024.11.20

[백준, 자바, 20920번] 영단어 암기는 괴로워

풀이해당 문제는 다양한 방법이 있을 것 같은데우선 아래의 풀이는 다음과 같음입력으로 주어지는 단어를 확인 후 조건에 따라 분류하는데우선 길이가 M이상의 경우를 체크한 뒤Map에 추가가 되어 있다면 카운팅을 1 증가 하고없다면 초기화를 해주는데초기화 할 때는, 출력 조건을 위한 정렬을 위해현재 단어와, 카운팅 이렇게 두개의 값을 함께 초기화 해주기.이후 Map의 value를 List로 변환하고, 조건에 따라 정렬해주고 출력하여 해결. import java.io.*;import java.util.*;public class _20920 { public static void main(String[] args) throws IOException { BufferedReader br = new Bu..

알고리즘 2024.11.18

[백준, 자바, 2346번] 풍선 터뜨리기

풀이해당 문제를 푸는 방법은 다양하게 있을 듯하다.다만 나는 배열을 새롭게 계속 변형하는 것은 효율적이지 않다고 생각하여인덱스를 사용해서 해결하고자 함.다만 처음에 간과했던 부분은 이미 터뜨린 풍선을 지나갈 때카운팅을 해버려서 계속 오답으로 나왔음.그래서 해당 문제를 이후에 깨닫고 나서는for문을 거쳐서 하나씩 이동하면서 해당 위치가 이미 터뜨린 풍선의 위치라면while문을 거치게 하여 터뜨리지 않은 풍선을 찾으며 해결하고자 하여 해결 import java.util.Scanner;import java.io.*;public class _2346 { public static void main(String[] args) throws IOException { Scanner sc = new Sc..

알고리즘 2024.11.14