목록Study (268)
전공공부

설명각 행렬별로 직사각형 형태의 PrefixSum을 구한 배열을 가지고 구할 크기의 직사각형을 이전 직사각형 형태로 만들어서 빼는 작업을 수행했습니다. 코드를 시각화 하자면 아래 그림과 같이 검은 직사각형 형태들로 내가 구하고 싶은 행렬인 빨간색 직사각형을 구하는 방식을 진행합니다. 사실 난이도에 비해서는 쉬운 문제였습니다. 별다른 기법이 필요한 것은 아니고 일반적인 구현 문제와 비슷합니다. 코드package BOJ.prefix_sum;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.Strin..
설명간단히 누적합을 떠올려서 풀 수 있었던 문제입니다. 일일이 문제 조건을 카운트한다면 시간 초과가 날 것이 뻔했기 때문에 우선 문제 조건 중 각 원소들의 행의 합과 각 원소들의 열의 합을 구한다는 것에 포커스를 맞춰 접근했습니다. 행 누적합 배열 열 누적합 배열을 각각 두고 각 행 또는 열의 크기 만큼 각 배열에 V 값을 더해주되 열 배열일때는 행의 크기만큼 v를 곱해서 누적하고 반대로 행 배열일때는 열의 크기 만큼 v를 곱해서 누적하는 배열을 만들어 그대로 출력하였습니다. 코드package BOJ.prefix_sum;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java..
설명최대 N,Q가 100000인 건으로 일일이 다 체크하면 무조건 시간 초과가 나는 문제였습니다. 따라서, 누적합을 활용하여 문제를 풀었습니다. for N문으로 한 번에 누적된 케이스들의 값을 계속 끌고 가면서 그 사이에 위치한 사이 값이면 해당 누적합의 차이 만큼 빼서 사이에 얼마나 다음 케이스가 큰 케이스인지 체크해 푼 문제 입니다. 코드package BOJ.prefix_sum;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.util.ArrayList;import java.util.List;import ..
설명요즘 제대로 된 문제를 많이 풀지를 않아서 머리가 돌지 않았습니다. 풀이라고 할 것도 없는 것이 배열을 진행하면서 단순히 배수 케이스 체크 그리고, 자는 학생의 케이스 배수 케이스 체크하여서 단순히 수집 못하는 경우만 빼면 되는 쉬운 문제 였습니다. 누적합으로 풀이하는 문제가 많았지만 마땅히 떠오르지 않아 단순 구현 방식으로 풀었습니다. 코드package BOJ.prefix_sum;import java.io.*;import java.util.ArrayList;import java.util.List;import java.util.StringTokenizer;public class BOJ_20438 { public static void main(String[] args) throws IOExcep..

자격증 취득 84점으로 통과했고 정상적으로 합격 메일을 24시간이 지날쯤에 받았습니다. 시험 자체는 어렵지 않았고 CLI 환경에 익숙해야 시간 내에 풀 수 있다고 말씀 드릴 수 있을 것 같습니다. K8S Document를 하나하나 읽으면서 진행하는 것은 아예 불가능하고 적어도 Deployment 만들기 정도는 CLI에서 빠르게 쳐내야 다른 문제도 쉽게 맞출 수 있습니다. 중간중간 기억나는 문제는 Dockerfile을 제시해주고 이를 Docker로 빌드해서 제공해주는 tar 파일에 저장하라는 문제랑 Cronjob을 이용해서 failedTimeout? 3초 설정하고 이런 작업들을 하라는 문제가 있었는데 다른 문제들 확인 작업 수행하다 보니 Cronjob 문제는 놓쳤던 거 같습니다. 그리고, serviceAc..
설명 이 전 강의실을 빼는 형태로 구현하기 위해서 PriorityQueue 내부에서는 가장 먼저 들어간 강의실을 빼는 형태로 생각하고 진행을 하였으며 이때, 새로 들어오는 강의가 이전 강의의 end 시간 보다 start 시간이 크면 PriorityQueue의 새로운 엔드포인트로 생성이 되는 것으로 생각하고 PriorityQueue를 늘리고 이런 경우가 아니고 만일, 들어오는 강의가 이전 강의의 end 시간 보다 start 시간이 작으면 이때는 강의실을 늘리지 않아도 되는 경우이므로 현재 내가 보는 강의실은 끝나는 엔드포인트로 지정하고 지금 들어온 강의를 PQ에 넣어서 상태값을 조정했습니다. 그러나, 이 모든 경우는 앞서 Arrays.sort를 통해서 강의의 순서값이 정렬이 되어 있어야 이전 상태 값이 다..
설명 간단한 그리디 문제였습니다. 연속되는 알파벳의 갯수를 구한 후 연속되는 알파벳의 List 설정을 연속된 경우를 한 경우로 치고 이를 List에 관리하여 List Size로 연속된 알파벳 갯수를 구하고 한 번에 칠해지는 경우 1 경우를 체크하여 이에 대해서 각각 B의 경우 R의 경우를 나누어서 마지막에 대소비교해서 최소로 작은 경우의 수를 출력하게끔 구성해서 풀었습니다. 코드 package BOJ.greedy; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.ArrayList; import java.util.List; public class BOJ_20365 { public static void main..
설명 이전의 상태 값을 기억하고 최소한의 값으로 지속적인 탐색을 통해서 값을 구했습니다. O(N)이 걸렸고 정답 값이 오버플로우가 나기 때문에 long으로 설정하는 것이 중요했습니다. 코드 package BOJ.greedy; import java.io.BufferedReader; import java.io.InputStreamReader; import java.util.StringTokenizer; public class BOJ_13305 { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer t..