전체 글 400

[백준 3078번] 좋은 친구 - java

문제 설명1. 전체 사람 수 N, 친구간 거리 K가 주어진다.2. 사람들 이름이 순서대로 주어진다.3. 이름의 길이가 같고 거리가 K 사이인 쌍을 모두 구해서 숫자를 구하면 된다.풀이 과정1. 슬라이딩 윈도우2. 백준은 다 좋은데 난이도가 애매할때가 있다. 이거는 골드4라고 하기에는 좀 쉬운 느낌3. 서로 친구라는거는 어차피 위로보나 아래로보나 기준이 같다.4. 그래서 그냥 위에서 아래로만 확인하면 쌍을 다 구하는 것과 같다.5. 위에서부터 아래로 K만큼 슬라이딩 윈도우 하고, 그 숫자는 HashMap으로 하면 된다.코드import java.util.*;public class Main{ public static void main(String[] args) { // 30000 개의 입력...

알고리즘 공부 2025.03.08

Pod 기본 정리

PodLifeCyclepod 가 있고, Status 안에 파드 전체 상태를 대표하는 phase 속성pendingInitContainer 라고 본 컨테이너 기동 전에 초기에 수행해야 할 내용이 있는 경우 그 내용을 담는 컨테이너가 있다.요게 본 컨테이너 생성보다 먼저 수행되어야 한다.파드 생성 전에 해야하는 작업들 수행 과정running참고로 이거 pod는 running 인데 내부 container 들이 running 이 아닐 수도 있다.모든 contidion 이 true 이도록 유지하는게 좋다.컨테이너 상태의 모니터링도 필요함!파드가 더이상 일을 하지 않는다면 succeeded 나 failed 로 간다.succeeded컨테이너 모두가 다 작업을 잘 마치고 성공하면 일로감.failed컨테이너 중 하나라도 ..

[leetcode - 57. Insert Interval] java

문제 설명1. 이미 존재하는 interval 들이 있다. 이것들은 서로 겹치지 않고 오름차순으로 있다.2. 여기에 새로운 interval 이 추가된다.3. 새로운 interval 이 기존 interval 사이로 잘 녹아들게 하면 된다.4. 녹아든다는건 오름차순으로 들어가고 혹시 겹치는 부분이 있으면 그걸 덥어주게 하면 됨풀이 과정1. 한번의 for문으로 구하는 방법은 잘 모르겠다.2. 3개의 for문으로 나눈다. (indexing으로 진행)3. (1) 새로운 interval보다 앞서는 부분 -> 도착점이 새 interval 앞부분보다 작은 애들은 신규 interval이랑 관계 없음4. (2) 새로운 interval이 들어가는 부분 -> 시작점이 새 interval 뒷부분보다 크면 안겹친다.5. 그리고, ..

알고리즘 공부 2025.03.04

[leetcode - 49. Group Anagrams] java

문제 설명1. 문자열의 배열이 주어진다.2. 아나그램(문자를 섞어서 같은 것들)을 묶으면 됨3. 순서는 상관 없음풀이 과정(느린풀이)1. 처음에는 간단하게 이중 map으로 구했다.2. 빈도수를 가진 map 을 만들고, 그 map을 다시 key로 가지면서 value 에 String 들을 List로3. 딱봐도 느릴것같았는데 최저속도로 통과했다ㅋㅋ코드class Solution { public int[][] merge(int[][] intervals) { // 정렬에 대한 얘기가 처음에 없음. 근데 시작점만 정렬해주면 될듯? Arrays.sort(intervals, (a, b) -> Integer.compare(a[0], b[0])); // 최초 배열 만..

알고리즘 공부 2025.03.03

Kubernetes Controller 기본 정리

Controller쿠버네티스의 컨트롤러는 서비스 관리와 운영에 도움을 준다.Auto Healing노드 위에 파드가 있는데, 파드가 다운되거나 노드가 다운되면 컨트롤러가 이를 즉각적으로 인지하고 파드를 다른 노드 위에 즉시 만들어 준다.Auto Scaling파드의 리소스가 limit 상태가 되었을 때 파드를 하나 더 만들어 줌으로써 부하를 분산시켜 준다.성능 장에 없이 안정적인 운영 가능Software Update파드 업그레이드를 한번에 쉽게 하도록 해주고, 롤백도 쉽게 해준다.Job일시적으로 특정 작업을 해야할 때에 이를 위한 파드를 만들어준 후에 사용 후 삭제효율적인 자원 활용이 가능해진다.Replication Controller, RelicaSetReplication Controller (Deprec..

kubernetes Object 기본 정리

Object 기본 정리Pod - Container, Label, Node ScheduleContainer하나의 독립적인 서비스 구동 가능한 컨테이너가 하나 이상의 포트를 가질 수 있지만 중복되는 포트는 가질 수 없다.한 컨테이너에서 다른 컨테이너로 접근할 떄에 포트를 통해 접근 가능참고로 파드 IP 는 쿠버네티스 클러스터 내에서만 접근 가능하고, 휘발성이 있다(재생성시 변경)Label모든 오브젝트에 달 수 있는데, 파드에서 가장 많이 사용된다.목적에 따라 오브젝트를 분류하고 그 분류된 오브젝트들만 따로 골라서 연결하기 위함key - value 쌍이고 한 파드에는 여러개의 라벨을 달 수 있다.뭐 type-web / io-dev 이런 식으로 구분 가능하도록 할 수 있음Node Schedule파드는 결국 여러..

[백준 14500번] 테트로미노 - java

문제 설명1. 4개 정사각형을 이어붙이는 도형들이 있다. (변을 붙이는 모든 형태)2. 지도가 주어진다.3. 위의 도형으로 숫자를 더해서 최대값을 구하면 된다.풀이 과정1. 구현2. 삼전 문제는 매번 느끼는건데 뭔가 구현 위주로 코드를 길게 만드는걸 선호하는 것 같다. 개인적으로 취향은 아님3. DFS + 엣지케이스 처리.4. depth 4 까지 찾아가면서 DFS 해주면 되고, ㅓ ㅏ ㅗ ㅜ 같은 중간에 가지가 뻗어나가는것은 이로 처리하기가 쉽지 않다(뒤로 돌아와서 check를 다시 해야하기 때문) 이는 그냥 따로 엣지케이스로 처리해준다.5. 성능이 될까? 했는데 이게 되네..코드import java.util.*;public class Main { private static int[][] map; p..

알고리즘 공부 2025.02.20

[leetcode - 148. Sort List] java

문제 설명1. 지금 값, 다음 노드가 들어있는 노드가 있다.2. 이거 정렬하면 된다. 풀이 과정 1. 분할 정복, 진짜 오래 헤맸고 혼자 못풀어서 해설을 보고 풀었다. 뭔가 알고리즘 실력에 점점 자신이 없어진다...2. 결국은 이것도 반으로 나눠서 이거를 정렬해주면 되는 문제이다.3. 반으로 나누기 : 보법이 다른 두개를 두고(한칸씩, 두칸씩) 두칸씩 가는 친구가 마지막까지 가면 한칸씩 가는 친구는 중간값이 된다.4. 그리고 위의 (3) 과정에서 얻은 반에서 다음꺼로 가지 못하게 이동을 끊어버림5. 구해진 반반을 계속 반복하면서 구하고6. (5)의 과정에서 구해진 애를 크기 비교해서 node 를 구해주고7. (6)으로 구한 애를 다시 (5)로 return 한 뒤 그거를 다시 (6) 해주는걸 반복하면 분할..

알고리즘 공부 2025.02.16

[leetcode - 30. Substring with Concatenation of All Words] java

문제 설명1. 문장 s 와 단어들이 배열로 주어진다.2. 단어들을 붙여서 s의 내부 문장을 만들 수 있으면 그 시작점을 구하면 된다.3. 순서는 상관없지만 단어들은 딱 붙어 있어야 한다. 풀이 과정 1. 슬라이딩 윈도우 + 해시맵2. 진짜 오래 헤맸다. 그리고 풀이 방법을 생각해내기는 했는데 솔직히 좀 더럽게 푼 느낌이다.3. 중요한 점은, words 의 내부 단어들의 길이는 같다는 것4. 만들어진 단어들을 앞에는 빼고 뒤에는 더하면서 비교하면 구할 수 있다.5. 그래서 words 배열의 길이만큼 시작점을 가진 슬라이딩 윈도우 풀이를 만들어주면 된다.코드class Solution { public List findSubstring(String s, String[] words) { int ..

알고리즘 공부 2025.02.12

[leetcode - 3. Longest Substring Without Repeating Characters] java

문제 설명1. 문자열이 주어진다.2. 그 문자열에서 중복되지 않은 최대 서브문자열 길이를 구하면 된다. 풀이 과정 1. 슬라이딩 윈도우 문제이다.2. 왼 -> 오 로 가면서 문자들을 HashSet 에 저장하고 중복이 있다면 그 전까지 저장한 Set을 지운다.3. 그리고 현재 위치까지의 값을 더하면 쉽게 구할 수 있다.4. (2) 과정을 하기 위해서는 이전에 저장한 값들을 index 로 지우면 된다.코드class Solution { public int lengthOfLongestSubstring(String s) { int ans = 0; // 최종 답 int remover = 0; // hashSet 삭제를 위한 index HashSet hs = new Hash..

알고리즘 공부 2025.02.09