목록분류 전체보기 (271)
전공공부
설명 왼쪽으로 모으는 경우 오른쪽으로 모두 모으는 경우를 카운트 한다. 이것이 가능한 이유는 카운트 해야 할 예시가 R,B 2가지로 2가지를 서로 다른 위치로 배정해서 모두 같은 곳으로 옮기면 되므로 한 쪽으로 몰아준다는 아이디어로 구현을 하면된다. 예시로, RBBBRRB의 경우 R을 오른쪽으로 모두 옮긴 경우 BBB B RRR 와 R을 왼쪽으로 모두 옮기는 경우인 R RR BBB B 가 존재한다. 이것을 B의 경우에도 적용하여 최저로 옮긴 경우를 반환하면 된다. 이것을 구현하기 쉽게 이해하기 위해서는 최초의 가장자리 위치의 값들만 제외하고 떨어진 것들만 옮기면 된다는 생각을 가지고 코드를 구현하면 바로 구현 가능하다. 코드 package Greedy; import java.io.*; import jav..
설명 재귀함수를 사용하는 문제였으며 처음에는 일일이 S -> T로 만드는 방법을 썼지만 12%에서 시간 초과가 났고 생각을 비틀어서 T -> S로 변경하여 소거법으로 진행하였다. 그러면, 문제 조건중 '문자열 뒤에 B를 추가하고 뒤집는다.' 가 있으니 B가 맨 앞에 있는 경우는 B의 경우로 들어온 것임을 유추 할 수 있어서 오히려 조건의 반대로 맨 앞의 B를 빼고 다시 뒤집는 것을 B의 조건으로 만들고 재귀함수 돌리고 A의 경우에는 '문자열 뒤에 A를 추가한다' 가 있으니 맨 뒤에 A를 빼고 재귀를 돌리는 형식으로 S를 만들어 나갔다. 그런데, 이 소거법을 진행하면서 간과한 것이... T = T.subString(1); 이런식으로 재귀를 돌아가는 T의 조건을 바꾸어 버렸다. 이런식으로 진행해버리면 다음 ..
BFS 문제는 너무 많이 풀어서 유형을 외워 버린 탓에 쉽게 풀 수 있었다. Queue에 넣고 방문 여부 체크하고 문제에서 제시한 조건을 따라서 조건을 생성 한 후 반복문을 돌면서 큐의 값을 소진 시키면서 탐색을 진행 너무나 많이들 쓰는 풀이이기 때문에 따로 설명은 필요 없을 듯하다. 만일, 원래 갈 수 있는 땅인 부분 중에서 도달할 수 없는 위치는 -1을 출력한다. 이 조건을 간과하고 풀었다면 arr이 0로 초기화 되었을테니 잘못된 부분을 찾지 못해서 어려움을 느꼈을 수도 있을 것 같다. package BFS; import java.util.*; import java.io.*; public class BOJ_14940 { static int dx[] = {-1,0,1,0}; static int dy[]..
단순 구현 문제 - list 객체에 등수 구하기 위한 값들을 넣은 후 내림차순 sort 한 후 같은 값일 때는 가장 작은 등수로 인식이 되어야 하므로 조건문 통과를 위한 값은 lastIndex의 값으로 사용함 - 등수 출력시에는 index 처음 나온 위치 값을 사용함 아래는 코드이다. package Simulation; import java.util.*; import java.io.*; public class BOJ_1205_등수_구하기 { public static void main(String[] args) throws Exception{ BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); StringTokenizer tk..

슬라이딩 윈도우(Sliding Window)는 배열 또는 문자열에서 연속적인 요소의 부분집합을 찾는 데 사용되는 알고리즘 기술 알고리즘은 주어진 문제의 해결을 위해 윈도우을 움직이면서 데이터를 처리하고 일부 조건을 충족하는 부분집합을 찾습니다. 이는 주로 부분집합의 합, 최대 길이 부분집합, 연속된 부분집합 등을 찾는 데 사용합니다. 1. 처음 시작과 끝으로 지정할 부분 집합의 길이 만큼 탐색한 후 데이터를 초기화 합니다. 2. 끝과 초기 인덱스를 이동하면서 윈도우 내부 데이터를 업데이트를 진행합니다. 아래는 부분 집합의 최대 합을 구하는 문제이다. public class SlidingWindow { public static int findMaxSubarraySum(int[] nums, int k) { ..
슬라이딩 윈도우 기법을 오랜만에 적용 해보아서 처음에 꽤나 헤맸던 문제다. aaabbaa 라는 문자열이 있으면 a의 갯수만큼 카운팅해서 그때의 존재하는 b의 갯수를 세면 총 옮겨야 하는 교환의 횟수가 된다. ababababab -> 중 a가 5개다. 즉, a 5개가 연속되면 된다. 그럼 여기서 ababa의 경우를 보면 b 두개 빼고 그 위치에 a 나머지 두개를 넣는다고 생각하면 된다. 이런식으로 생각을 하면 떠오르기가 쉬운데 처음에 캐치하기 힘들었던것 같다. 그리고, 문제 조건 중 원통의 구조로 마지막과 처음이 이어진 circle_queue 처럼 생각을 해야 하는 부분이 있다. 슬라이딩 윈도우가 처음이라면 블로그에 정리하였으니 찾아보면 좋을 것 같다. 슬라이딩 윈도우 슬라이딩 윈도우(Sliding Win..
감이 안 잡혀서 많이 참고하고 풀어 본 문제다. 최소 거리를 저장하는 배열을 두고 from -> to 갈 곳이 없을 때 계속 한 칸씩 앞으로 가는 것을 구현해내면 완성 할 수 있다. 상세 설명은 아래 코드와 함께 주석으로 적었다. package Graph; import java.io.*; import java.util.*; public class BOJ_1446 { static class Data { int to; int w; public Data(int to, int w) { this.to = to; this.w = w; } } public static void main(String[] args) throws Exception { BufferedReader in = new BufferedReader(n..

Service 정의 : 애플리케이션 안 팎의 요소들과 통신을 할 수 있게 하는 요소입니다. 예시 : POD 간의 통신을 가능 할 수 있게 하는 요소입니다. 백엔드 POD 프론트 엔드 POD DB 등 External Connection to K8S 쿠버네티스 클러스터에 외부 사용자가 접근 하려면 어떻게 해야 할까요? SSH로 curl 요청으로 들어가서 하면 10.244.0.0으로 소통 할 수 있지만 이것은 사실 서버 내부에 들어와서 연결을 하는 것이니 지금 원하는 외부 요청이 아니다. NodePort 방식 노드 IP로 연결을하는 방법은 curl 192.168.1.2:30008 으로 연결을 하는 것인데 노드 포트로 연결해서 바깥에서 연결하는 방식이다. 이는 노드 포트 방식으로 부르기도 한다. 연결하는 방법은..