본문 바로가기

분류 전체보기202

DP 팁 일단은, 나는 DFS나 BFS를 먼저 떠올린다.너무 클 거 같다면 1. 문제를 막 풀고 그 결론이 DP 2. 앞에서 부터 DP (2번의 경우에는 DP[I] = DP[I-1]+_ORIGINAL[I-2]~~ 식으로 할 때, 어디까지 DP의 영향이 닿고, 어디부터 닿지 않는지를 고려하자)3. 뒤에서 부터 DP (굉장히 어렵다)  이걸 사실 암기처럼 할게 아니고,1번의 경우는 수학적인 식이 DP라는 말이고 EX) Y = X+1 , Z = 2Y , Z = 2X+2 이런 느낌2번의 경우, 3번의 경우는 지금 현재의 값이 어디에서 왔는가. 를 고민하고어디까지 이전 값이 영향을 끼쳐도 되는가, 어디부터 안되는가 고민하면 된다.  또, 단순한 1차원 행렬이 아닐 수도. 기본적으로 dp가 2차원 행렬에서 이전 값이 다음 .. 2024. 10. 10.
투 포인터, 슬라이싱 윈도우 사용 전략? 일단은, For문으로 생각해본다. for문으로 생각하면 이중, 삼중이 되어 시간 복잡도가 1억이 넘는 경우가 생기는데, 이럴때 생각해볼 방안이다. 투포인터의 핵심은기존 정보를 저장해놓고, start, end index를 조정하여 특정 원소만 빼고 더한다는 것이다.투포인터의 시간복잡도는 O(N)이다.하지만 아무렇게나 짠다고 O(N)이 되어 주는 것은 아니고,기존 정보를 저장해놓고 END는 목표 (보통 WHILE문 안에 ENDSTART는 그 이후에 해당 INDEX를 쫓아가게 구현해야 한다. 그리고, 한 작업 중에 START나 END 모두 같은 방향으로 움직여야 한다.그래야 O(2*N = N)이 나온다.핵심 마지막은, 그러한 포인터들이 초기화되어선 안된다는 것. END가 3일때 START가 다 돌.. 2024. 9. 28.
인접 행렬, 리스트를 활용한 BFS 즉, 선이 많을때는 인접행렬을, 그렇지 않을때는 둘다 매우 많을때는 인접 리스트로 구현하자.  이게, List로 배열을 만들어 쓰는 예시이다.  public static int BFS(int [][]graph, int n)     {         Queue q = new LinkedList();         boolean [] visited = new boolean[n+1];         int cnt = 1;         q.add(1);         visited[1] = true;                  while (!q.isEmpty())         {             int now = q.poll();                          for (int i = .. 2024. 9. 19.
특정 조건의 값(배열에 없는, 선택할 떄?) - 이진탐색 import java.util.*;import java.lang.*;import java.io.*;class Main {        public static void main(String[] args) throws IOException {        BufferedReader br = new BufferedReader(new InputStreamReader(System.in)) ;        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));        int N = Integer.parseInt(br.readLine());        String [] Strarr = br.readLine().split(" ").. 2024. 9. 13.
BufferReader,Writter. 기타 자료구조 활용법 현재 파이썬으로 한 문제를 풀고, 그 문제를 JAVA로 바꾸는 것을 진행중이다.그러다 실버1정도의 난이도임에도 JAVA에서'만' 출력오류가 나는 것을 발견했다. 1. 입력받기BufferReader br = new BufferReader(new InputStreamReader(System.in));int N = Integer.parseInt(br.readLine()); // nextInt없음 2. 출력하기BufferWriter bw = new BufferWritter(new OutPutStreamWriter(System.out)); //tt아니다.. Stringbuilder sb = new StringBuilder();sb.append("할일"), sb.append('\n') // 각 문자별 띄어쓰기bw... 2024. 8. 10.
다익스트라 다익스트라는, 최단 경로 (비용이 일정하지 않을 때) 사용하는 알고리즘이다.(비용이 일정할땐, bfs로 푸는 것이 쉬움을 이전에 배웠다.) 세팅 :  정답 행렬 (어디서 어디로 갈때 얼마나 비용이 드나) 를 무한대로 초기화 (n,n은 0으로 초기화)0.출발 노드를 우선순위 큐에 넣는다.1. 처음 입력받은 거리 행렬 중, 현재 인덱스 -> 갈 수 있는(아직 안 간) 가장 값이 작은 노드 선택2. 해당 노드까지 가는 비용 ex ) 1->4 >>> 정답행렬의 해당 노드 [ex )정답행렬[1] ] + 기존 행렬의 1->4 3. 업데이트가 실행 되면,  그 값을 정답행렬에서 바꾼다. 4. 업데이트가 실행 되면,  그 INDEX를 우선순위 큐에 넣는다. (주로 HEAPQ로 구현한다. 정렬을 안해도 되므로)5. 그 .. 2024. 8. 9.
문자열 STRING.CONTAINS("문자열 중 일부") , 문자열.REPLACE("문자","바꿀 거") ; 2024. 8. 7.
배포 완료. 프로젝트 회고 해당 아키텍처가, 우리가 NCP를 통해 구축한 최종 플랫폼이다. 이와 같은 형태로(UI 개선 이전 본이지만, 전체적인 구조 정도는 파악할 수 있다.) 기능 리스트업은 간략하게, 다음과 같다. 1. 회원가입,로그인2. OAUTH2 로그인,회원가입3. 상품 조회 4. 상품 작성, 수정, 삭제5. PG사를 활용한 결제 진행6. 채팅 (추가 예정)7. 장애인이 활용가능한 체육 시설 전달 그 과정에서, 다양한 시스템적인 고민을 했다.     1. DELETE 노출을 최소화 하기 위해 노력했다. - 매 자정 마다 DELETE, 스케줄러를 활용해 데이터 수 확인 후 제거 2. MSA 구조 상의 예외 처리 - APPLICATION 영역에서 통신하는 형태로 구현 - MSA로 결제를 구축하는 과정에서, 시스템간 통신하는 .. 2024. 7. 31.
자바 문법 - 배열, 정렬, set 1. python 처럼, 배열을 받아와서 split 시키기 String[] myarr = s.split("") 2. 특정 값의 index 불러오기 myarr.indexOf(값) -> 젤 가까운 값 3. valueOf주의 사항. => String.valueOf(바꿀 값)사실상 . parseInt같은 String 버전이다. 4. 배열 정렬import java.util.Arrays; -> 까먹지 말기Arrays.sort(배열)Arrays.sort(배열,Collections.reverseOrder()) 5.list 정렬?List list = new LinkedList();list.add(“김철수”);list.add(“김영희”);list.sort(); 6.char 대문자 A-Z: 유니코드 값 65-90소문자 a-.. 2024. 7. 24.
NCP CI CD 구축(IN K8S CLUSTER) 결과로컬에서 PUSH2.자동 이미지 빌드 3. 자동 배포 배포 전략 → ROLLING (모두가 MSA 이므로, 추가 자원 소비 방지)ROLLING은 싹다. BLUE GREEN은 버전 1,2 , 카나리는 조금      4. 배포 완료주의 할 점: 포트 번호 변경은 CI/CD로 불가. → K8S 보안 정책 (이미지 변경은 가능)  느낀 점:정말 CLOUD 생태계의 경쟁은 치열하구나NCP의 CI/CD 구축은, 정말 너무나도 편리하였음.이 정도 기술력이라면. . 국내 클라우드 생태계는 바뀔 수도 있겠다는 생각을 했음언제든지 바뀔 수 있는 것이, 시장의 지배자라는 생각을 했으며, 이에 따라 적재 적소에 맞는 활용 능력이 필요함을 깨달음.K8S 구축 과정에서는 SPRING CLOUD를 분리하는 과정에서 고난이 있었.. 2024. 7. 14.