일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
- 20055
- 백준 20055 컨베이어 벨트 위의 로봇
- 13460 구슬탈출 2
- 코틸린인액션
- 싱글톤 컨테이너
- Kotlin In Action
- 스프링 핵심 원리 - 기본편
- 고급매핑
- Kotlin in action 10장
- 20055 컨베이어 벨트 위의 로봇
- 7장 고급매핑
- 객체 지향 설계와 스프링
- 컨베이어 벨트 위의 로봇 Python
- 백준 13460 Python
- Kotlin in action 6장
- Kotlin in action 3장
- kotlin in action 정리
- 백준
- 자바 ORM 표준 JPA 프로그래밍 7장
- Kotlin
- 기능개발 python
- Python
- 스프링 핵심 원리
- 스프링 컨테이너와 스프링 빈
- 코틀린
- KotlinInAction
- 코틀린인액션
- 스프링 핵심 원리 이해
- spring
- Kotlin in action 5장
- Today
- Total
목록분류 전체보기 (159)
기록하는 습관

문제 www.acmicpc.net/problem/11279 코드 첫 번째 코드 (시간 초과) 아래 코드는 시간 초과가 나는 코드이다. 이유는 input()을 사용했기 때문이다. 시간초과가 나지 않으려면 sys.stdin.readline()을 사용해야 한다고 한다. from heapq import heappop, heappush N = int(input()) heap = [] for _ in range(N): num = int(input()) if num == 0: if len(heap) == 0: print(0) else: print(heappop(heap)[1]) else: heappush(heap, (-num, num)) 두 번째 코드 from heapq import heappop, heappush ..

문제 www.acmicpc.net/problem/2504 코드 string = input() stack = [] answer = 0 for s in string: if s == "(" or s == "[": stack.append(s) elif s == ")": sum = 0 while stack: top = stack.pop() if top == "[" or top == "]": # 올바르지 못한 괄호 print(0) exit(0) elif top == "(": if sum == 0: # () 일 경우 stack.append(2) else: # (X) 일 경우 stack.append(2 * sum) break # ( 괄호 만났으면 다음 괄호문자열 받기 else: # ( 만날 때까지 숫자 더하기 sum ..

문제 www.acmicpc.net/problem/2346 코드 from collections import deque N = int(input()) q = deque([(num, idx) for idx, num in enumerate(map(int, input().split()))]) answer = [] while q: num, idx = q.popleft() answer.append(idx+1) if q and num > 0: q.rotate(-1 * (num-1)) elif q and num < 0: q.rotate(-1 * num) print(" ".join(map(str,answer))) 풀이 1. 첫번째 숫자는 우선적으로 popleft()를 통해 꺼낸다. 2-1. q에 풍선이 남아있고, num이..

1. nGrinder 이슈해결 nGrinder에서 run_agent.bat 실행 시 에러 발생. 특정 위치에 jvm.dll이 없다는 뜻이므로 해당 위치에 jvm.dll 파일을 복사하여 해결함. (참고 : https://kingle1024.tistory.com/206) Can't not set headers 에러 발생 → 헤더 설정이 제대로 되지 않아서 발생하는 이슈. 우리 경우는 헤더에 인증 토큰을 넣어 전달해야 하는데 전달이 제대로 되지 않음. 배열 객체로 헤더를 설정해주고 request.GET에 url과 headers를 넣어줌. (참고: https://gist.github.com/ihoneymon/a83b22a42795b349c389a883a7bbf356) GET content detail에 대한 성..

#1 추천 피드 캐싱을 쓰는 이유는? -> 유동적인 값을 커서로 사용할 수 없는 페이징 방식 때문이다. 그래서 캐싱된 데이터만 api 호출 시 pull 하는 방식으로 변경 10분 단위로 카테고리 별 좋아요 기준으로 내림차순 정렬된 게시글들을 캐싱 // 채택 !! 정렬된 데이터를 캐싱 해 놓으면 유저들에게 해당하는 카테고리의 데이터를 바로 줄 수 있으며, Redis에서 Sorted Set 자료구조를 통해 데이터를 효율적으로 관리 가능하기 때문이다. 카테고리 별로 전체 content 중 범위를 나누어 n개의 content를 캐싱하고, 캐싱된 contents 범위 안에서 pull(read)할때 마다 유동적으로 바뀐 좋아요 수를 기준으로 정렬해서 read 시켜준다. * batch vs ca..
실시간 랭킹 업데이트 프로세스 ** user1 -> user2 Ranking 관계를 여러 개 둘 경우 Ranking { score: 최종 점수, like: 좋아요 개수, comment: 댓글 개수, follow: follow 여부, date: 날짜 } like, comment, 개수를 넣은 이유는 total 점수 뿐만 아니라, 나중에 like, comment 별로도 실시간랭킹을 줄 수 있게 하기 위해. User1 -> user2 에게 like, comment action을 한다면 user1 -> user2 FOLLOW 관계가 있으면 user1 -> user2에게 해당 date의 RANKING Relation이 존재하는지 확인 있으면 like, comment, total score 점수 업데이트. 없으면 ..

실시간 친밀도 랭킹 ** MQ를 프로젝트에 도입하게 된 이유 친밀도 랭킹을 계산하는 것은 사용자에게 즉각적으로 실시간 응답이 되지 않아도 되는 프로세스로, 백엔드에서 비동기적으로 처리할 수 있는 배치 프로세스이다. 처음엔 하루 주기의 배치 프로세스로 작업을 하려고 했지만 큐를 활용해 최대한 배치 작업들을 실시간 업데이트를 하며 효율적으로 처리하고자 했다. 좋아요/댓글 프로세스에서 score 계산까지 같이 하는 것이 가장 좋지만, 사용자가 많아지고 좋아요/댓글 요청이 많아질수록 Ranking 계산 때문에 delay가 생길 수 있으므로 성능 상 문제가 생길 수 있다. 따라서, MQ를 도입하여 좋아요, 댓글 계산 요청을 MQ에 보내 사용자가 바로 다음 액션을 취할 수 있도록 하고 계산 처리는 MQ에서 꺼내 별..