본문 바로가기

분류 전체보기

(269)
2644 촌수계산 / DFS, BFS 정답어제 풀었던 케빈 베이컨의 법칙과 동일시작 노드로부터 도착노드까지의 거리를 구해서 반환하면 됨from collections import dequedef BFS (graph, start, n, goal): queue = deque() queue.append(start) visited = [False] * (n + 1) visited[start] = True distance = [0] * (n + 1) while queue: current = queue.popleft() for neighbor in graph[current]: if visited[neighbor] is False: distance[ne..
인덱스와 B-Tree 인덱스란?색인 : 쉽게 찾아볼 수 있도록 일정한 순서에 따라 놓은 목록원하는 값을 빠르게 찾을 수 있음where 절을 통해서 검색할 수 있어야 인덱스가 사용됨데이터베이스 테이블에 대한 검색 성능을 향상시키는 자료 구조이며, where 절 등을 통해서 활용됨 인덱스를 적용하지 않는다면?100만건 이상의 데이터에서 이메일이 yn324@naver.com인 회원을 조회할 때 느리다전체 데이터에서 순차적으로 확인하기 때문에!데이터가 기준없이 저장된 상태이기 때문에 데이터가 특정 기준으로 정렬되어 있다면 검색을 빠르게 할 수 있음 인덱스 특징인덱스는 항상 최신의 정렬상태를 유지함인덱스도 하나의 데이터베이스 객체데이터베이스 크기의 약 10% 정도의 저장공간 필요 인덱스 알고리즘페이지 : 데이터가 저장되는 단위 (16..
1389 케빈 베이컨의 6단계 법칙 / DFS, BFS 선택해야하는 알고리즘최단거리 = BFSBFS는 가까운 노드부터 탐색하기 때문에 첫 방문 = 최단거리임이 보장됨미로 탈출 (1칸 이동이 비용 1일 때)각 노드까지 몇 단계만에 갈 수 있는지최단 이동 횟수, 최단 거리 찾기모든 경로를 다 탐색하고 싶을 때 = DFS모든 경로를 다 탐색하고 싶을 때모든 경우의 수를 보고 싶을 때 (조합, 순열, 경로)백트래킹 (N-Queen, 스도쿠, 조합 등)사이클 찾기=> 그러므로 해당 문제에서는 반드시 BFS를 사용해야 함 기준 노드에서부터 다른 노드까지의 거리1. distance = [0] * (n + 1) 의미모든 거리를 처음엔 0으로 초기화 n = 5distance = [0] * (n + 1)print(distance)# 출력: [0, 0, 0, 0, 0, 0]#..
10451 순열 사이클 / DFS, BFS 정답def DFS(g, start, visited): visited[start] = True for i in g[start]: if visited[i] is False: DFS(g, i, visited)t = int(input())ans_arr = []for i in range(t): n = int(input()) graph = [] for _ in range(n + 1): graph.append([]) v = list(map(int, input().split())) for i in range(1, n + 1): graph[i].append(v[i - 1]) visited = [False] * (n + 1..
FCM 알람 전송 재시도 구현하기 Docconneting프로젝트에서 알람 전송기능을 모두 구현했다하지만 알람을 전송하고 실패하는 경우가 분명히 발생하고, 이 경우에 사용자가 알람을 받지 못한다면 이건 꽤나 큰 문제라는 생각이 들었다그래서 이를 해결하기 위해서 알람 재시도를 구현해야겠다고 마음을 먹었다!문제 상황@Async("fcmExecutor") public void sendMulticastAlarm(List fcmTokenBatche, String content) { try { MulticastMessage message = MulticastMessage.builder() .setNotification(Notification.builder() ..
컨트롤러 테스트에 인증/인가가 들어있는 경우 @SpringBootTest를하면 모든것이 다 빈으로 등록이 되니까 자연스럽게 테스트가 됨@WebMvcTest 사용하면 컨트롤러만 빈으로 등록이되서 ArgumentResolver랑 JwtFilter 를 수동으로 등록을 해줘야 작동을 한다!JpaMetamodelMappingContext : Spring Data JPA의 자동 설정 중 하나인 JpaMetamodelMappingContext가 없어 생기는 빈 등록 예외를 방지하기 위해서 주입또한 컨트롤러는 Argument Resolver랑 Converter 같은걸 거치니까 새로운 객체가 생겨서 eq로 내용이 동일한지 확인해줘야함 기존에 @WebMvcTest를 사용했는데 수동으로 등록하지않았다면 AuthUser에 필드가 다 null이었음 ⇒ any()를 써버리..
FCM의 구조와 이를 구현하기 위한 고민(Feat : FCM토큰관리와 전송 메서드) FCM 구조무료로 메시지를 보낼 수 있는 교차 플랫폼 메시징 클라우드 서버 장점Firebase 플랫폼과 통합되어 있어 설정과 사용이 간편Firebase 콘솔에서 설정을 쉽게 관리할 수 있음안드로이드, iOS, 웹을 포함한 여러 플랫폼에서 사용 가능Google의 인프라를 기반으로 하여, 대량의 메시지를 안정적으로 처리할 수 있음FCM은 무료로 제공되며, 추가 비용 없이 사용할 수 있음주제 기반 메시징, 메시지 우선순위 설정, 다양한 메시지 타입 지원(알림 메시지, 데이터 메시지) 등 다양한 기능을 제공단점메시지 전송 및 전달 상태에 대한 세부적인 제어가 제한적 ex) 재시도 로직에 대한 상세한 제어가 어려움FCM은 Google 서비스에 의존적이므로, Google 서비스가 제한된 지역에서는 사용이 어려울 수..
알람 전송 구현 기술의 고민 이번에 우리 팀에서 기획한 프로젝트는 docconneting이라는 의사와의 채팅과 유료 질문이 가능한 프로젝트였다 알람 전송 시나리오채팅 결제가 성공하면 해당 의사에게 알람이 간다등록이 성공하면 해당 카테고리 의사에게 알람이 간다등록이 성공하면 해당 카테고리 의사에게 알람이 간다알람 조회시나리오는 이런식이다!여기서 나는 알람 전송 기능을 담당하게 되어서 알람을 구현하기 위해서 어떤기술을 사용해야 할지 고민을 해보게 됐다 알림 구현 기술들폴링 어떤 값을 확인하거나 갱신하는 과정정기적 폴링(Regular Polling) : 일정한 간격 또는 주기적으로 데이터를 확인하거나 갱신이벤트 기반 폴링(Event-based Polling) : 특정 이벤트가 발생했을 때만 데이터를 확인하거나 갱신 1) 짧은 폴링(Sho..