목록분류 전체보기 (270)
DHistory
개요대용량 데이터 검색을 진행함에 있어 ElasticSearch, MySQL FullText, MySQL Like의 성능을 비교를 했습니다.검색을 진행한 조건은 다음과 같습니다. 1. "abc" 로 시작하는 단어가 포함된 경우 → "def abcd gcf"2. "abc" 문자가 포함된 경우 → "def dabc gcf" Performance 비교는 hey를 활용하였습니다. Table Schema현재 데이터 건수는 275,684건이며 title에 index / fulltext 가 정의되어있습니다.Create Table: CREATE TABLE `post` ( `id` bigint NOT NULL AUTO_INCREMENT COMMENT '(AI) ID', `title` varchar(100) COL..
개요SNS NewsFeed 조회 시 팔로잉 유저들의 최신 게시글을 조회해야합니다.팔로잉한 유저의 수가 1800명이고 각 유저들이 1000개씩 글을 작성했다고 가정합니다.게시글의 전체 데이터 개수는 1,800,000 건입니다. 팔로잉한 유저들의 게시글 중 최근 100개의 게시글을 조회를 진행해보겠습니다. 일반 쿼리 조회 구현 시 피드 목록 조회 시 비용이 비싼 쿼리를 조회해야합니다.(Post의 Dummy Data를 대규모 데이터로 넣기 위해선 시간이 오래 걸리므로 비싼 쿼리로 만들어 진행)@Service@RequiredArgsConstructorpublic class FeedService { private final PostRepository postRepository; private fina..
OverviewJIT Compiler는 프로그램을 실제 실행하는 시점에 기계어로 번역하는 컴파일 기법입니다.처음 실행 시 interpret를 하면서 자주 쓰이는 코드를 캐시에 담아두었다가 재사용합니다.Runtime 시 적용되는 기술이며 interpret과 compile을 혼합하여 사용합니다.→ 처음 실행 시 interpret하면서 실행→ 다음 실행 시 캐싱된 기계어 파일을 읽음 (like compile) Interpret vs Static CompileInterpret: 실행 중인 프로그램 코드를 읽어가면서 기계어로 번역Static Compile: 실행하기 전에 프로그램 코드를 기계어로 번역 Java에서는 어떻게 사용할까? Compiler는 .java 파일을 .class 파일(bytecode)로 변..
문제https://www.acmicpc.net/problem/24481 풀이1. 시작점으로 부터 모든 노드의 깊이(depth)를 구하는 문제2. 깊이는 현재 노드의 깊이 + 1 예시5 4 11 22 33 42 5 코드import syssys.setrecursionlimit(130000)n, m, r = map(int, sys.stdin.readline().rstrip().split())edges = [[] for _ in range(n + 1)]visited = [-1] * (n + 1)for _ in range(m): x, y = map(int, sys.stdin.readline().rstrip().split()) edges[x].append(y) edges[y].append(x)fo..
문제https://www.acmicpc.net/problem/12933 풀이한 마리의 오리가 여러 번 소리를 낼 수 있습니다.녹음 중에서 여러 번 소리를 낸 오리를 찾아야합니다. 단, 녹음이 올바르지 않은 경우도 있습니다.1) q 로 시작하지 않는 경우2) k 로 끝나지 않는 경우3) 5의 배수가 아닌 경우 이 경우를 제외하고는 녹음이 제대로 되었습니다.방문하지 않은 문자열을 순차적으로 방문하여 울음 소리(quack)를 찾습니다. 예시 녹음: quqaquuacakcqckkuaquckqauckack오리 1: ____q_u__a___ck_______________오리 2: __q__u_ac_k_q___ua__ckq_u__ack오리 3: qu_a_______c___k__qu___a_ck___ 코드impor..
문제https://www.acmicpc.net/problem/1793 풀이문제가 상당히 이상하니 추가 조건을 확인 후 풀어야합니다. [추가 조건]1. n이 0인 경우 1 출력2. 1x2도 사용 가능 예제n이 1인 경우1x2 1개 n이 2인 경우2x2 1개, 2x1 2개, 1x2 2개 코드import sysd = [0] * (250 + 1)d[0] = 1d[1] = 1for i in range(2, 251): d[i] = 2 * d[i - 2] + d[i - 1]while True: try: n = int(sys.stdin.readline().rstrip()) print(d[n]) except: break
문제https://www.acmicpc.net/problem/9658 풀이d[n]: 돌의 수가 n 개인 경우 우승자상근이가 먼저 시작하기 때문에 "한 번"이라도 창영이가 마지막 돌을 가져가게 된다면 상근이의 승리 예시d[1] = 1 (상근 마지막돌, 창영 승)d[2] = 1 1 (창영 마지막돌, 상근 승)d[3] = 1 1 1 (상근 마지막돌, 창영 승) 3 (상근 마지막돌, 창영 승)d[4] = 1 3 (창영 마지막돌, 상근 승) 3 1 (창영 마지막돌, 상근 승) 4 (상근 마지막돌, 창영 승) 코드import sysn = int(sys.stdin.readline().rstrip())d = [False] * (n + 5)# Fa..
문제https://www.acmicpc.net/problem/1254 풀이1. 이미 팰린드롬인 경우 해당 문자열의 길이가 최소2. 앞에서 부터 하나씩 거꾸로 붙여나가며 팰린드롬 문자열 확인 예시abcd 코드import systext = sys.stdin.readline().rstrip()def palindrome(text): if text == text[::-1]: return len(text) for i in range(len(text)): temp_text = text + text[:i + 1][::-1] if temp_text == temp_text[::-1]: return len(text) + i + 1 # 무의미 ..
문제https://www.acmicpc.net/problem/17086 풀이1. 상어 주변은 미리 제외해야 함. : 재탐색을 진행하면 안되기 때문에 미리 주변을 제외해야한다. (핵심: 주변을 미리 제외하려면 Queue에 미리 넣어서 BFS 탐색을 진행)2. 상어로부터 먼 거리 확인 예시5 40 0 1 00 0 0 01 0 0 00 0 0 00 0 0 1 # 미리 제외0 2 1 22 2 2 21 2 0 02 2 2 20 0 2 1# 이후 채워지지 않은 거리 채우기3 2 1 22 2 2 21 2 3 32 2 2 23 3 2 1 코드import sysfrom collections import dequen, m = map(int, sys.stdin.readline().rstrip().split())sha..
문제https://www.acmicpc.net/problem/2304 풀이오목하게 들어간 부분이 없으려면, 루프탑 기준 왼쪽과 오른쪽으로 나누어 문제 풀이를 진행해야 합니다.오른쪽 부분은 순서를 뒤집어서 문제를 풀어야 루프탑과 연결했을 때 오목한 부분이 없습니다. 루프탑 기준으로 왼쪽 부분과 오른쪽 부분으로 나눈 후 왼쪽 부분의 합 + 오른쪽 부분의 합 + 루프탑 사이의 합을 구하면 됩니다. 예시72 411 415 84 65 38 1013 6 왼쪽 배열: (2, 4) (4, 6) (5, 3) (8, 10)오른쪽 배열: (8,10) (11, 4) (13, 6) (15, 8)→ 루프탑: (8, 10) 왼쪽 배열의 합: (4 - 2) * 2 + (5 - 4) * 6 + (8 - 5) * 6오른쪽 배열의 합: ..