알고리즘 384

[백준, 자바, 1268번] 임시 반장 정하기

풀이오늘도 깨달았다...문제를 확실히 읽지 않는자너는 그냥 틀려라!!!처음에는 단순히 같은 반이었던 학생을 카운팅하는 것으로중복해도 계속 카운팅해서 제출했다가 틀림.이후 다시 확인해보니 중복을 제거 후 카운팅하는 것으로어떻게 해결할지 고민하다가 그냥3차원 배열을 사용하여 해결하기로 함.이후에 제출했는데 77%에서 틀림.그래서 다시 확인해보니 같은 반이 된 적이 없는 경우에도초기값으로 인해 존재하지 않는 0번 학생이 출력되고 있다는 것을확인하여 변경 후 제출.결론.문제를 똑바로 읽자. import java.io.*;import java.util.HashSet;import java.util.Set;import java.util.StringTokenizer;public class _1268 { publi..

알고리즘 2024.11.27

[백준, 자바, 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

[백준, 자바, 24060번] 알고리즘 수업 - 병합 정렬 1

풀이해당 문제는병합 정렬하는 문제로기존 알고있던 방식보다 더 깔끔하게 작성할 수 있을 것 같아서의사 코드를 참고하면서 작성했고,중간에 M과 cnt가 같으면 탈출할 수 있도록 조건 분기를 넣어좀 더 효율성있도록 코드를 작성. import java.io.*;import java.util.*;public class _24060 { static int M; static int[] li; static int[] check; static int result = -1; static int cnt = 0; public static void main(String[] args) throws IOException { BufferedReader br = new BufferedRea..

알고리즘 2024.11.19