일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- 이분탐색
- 우선순위큐
- dynamic programming
- Backtracking
- programmers
- Spring
- 알고리즘
- DP
- DFS
- 너비우선탐색
- 브루트포스
- 그리디
- DynamicProgramming
- JPA
- 백트래킹
- greedy
- 구현
- 동적계획법
- 네트워크
- 스프링
- Network
- ReactiveProgramming
- 백준
- 프로그래머스
- Algorithm
- 깊이우선탐색
- 부분수열의합
- BFS
- 해시맵
- boj
- Today
- Total
목록분류 전체보기 (69)
옌의 로그
문제[프로그래머스] 단어 변환 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 사용 알고리즘- BFS (너비우선탐색) / 그래프 탐색- 시간복잡도 O(N² × L) (N: 단어개수, L: 단어길이) 해결방법단어 배열에 타겟이 있는지 체크 후, 없다면 바로 종료(return 0)해준다각 단어를 노드로 보고, 한 글자만 다른 단어를 간선(edge)으로 연결해 그래프를 먼저 만든다begin과 한 글자 차이나는 단어들을 시작 노드로 보고 큐에 먼저 넣은 후 BFS를 돌린다BFS는 가까운 단어부터 탐색하므로, 타겟 단어에 처음 도달한 시점의 단계 수가 곧 최단 변환 횟수가 된다소스코드사용언어 : javaimport ja..

본 포스팅은 스프링으로 시작하는 리액티브 프로그래밍 책을 참고하여 작성하였습니다. ( _ _)마블 다이어그램(Marble Diagram) 이란?마블 다이어그램은 비동기적인 데이터 흐름을 시간의 흐름에 따라 시각적으로 표시한 다이어그램을 의미한다.그림에서 두 개의 타임라인이 존재하는데, 첫 번째가 Publisher가 데이터를 emit 하는 타임라인이다두 번째는 Operator 함수에서 가공 처리되어 출력으로 내보내진 데이터의 타임라인이다Marble로 표시된 데이터는 Publisher가 emit하는 데이터를 의미한다. 타임라인은 왼쪽에서 오른쪽으로 시간이 흐르는 것을 의미하기 때문에 가장 왼쪽에 있는 1번 구슬이 시간상으로 가장 먼저 emit된 데이터이다중간 박스는 Publisher로부터 전달받은 데이터를 ..
문제[프로그래머스] 숫자 게임(Summer/Winter Coding(~2018))사용 알고리즘- 투 포인터 (two pointer) / Greedy- 시간복잡도 O(N logN)해결방법A, B를 모두 오름차순 정렬A의 각 원소에 대해, B에서 A보다 큰 숫자를 찾아 이긴 횟수를 증가시킨다소스코드사용언어 : javaimport java.util.*;class Solution { public int solution(int[] A, int[] B) { int answer = 0; // A, B 오름차순 정렬 Arrays.sort(A); Arrays.sort(B); int j = 0; // B inde..
문제[프로그래머스] 야근 지수사용 알고리즘- Heap / Greedy- 우선순위 큐 (PriorityQueue)- 시간복잡도 O(n logN) (n: 남은 시간, N: 작업 수)해결방법주어진 works를 우선순위 큐에 작업량이 많은 순으로(내림차순) 넣는다남은 작업시간 n 동안 반복문을 돌면서, 가장 많은 작업량을 가진 일을 찾아서(조회) 1씩 줄이고 다시 큐에 넣는다이 동작을 효율적으로 처리하기 위해 힙 구조를 사용소스코드사용언어 : javaimport java.util.*;class Solution { public long solution(int n, int[] works) { long answer = 0; PriorityQueue pq = new PriorityQueu..
최근 실무에서(이 포스팅의 연장선이다 ㅎㅋㅋ), 아래와 같은 이벤트 리스너 코드를 작성했는데 이상한 현상을 발견했다.@Slf4j@RequiredArgsConstructor@Componentpublic class MessageEventHandler { private final MessageRepository messageRepository; @Transactional @TransactionalEventListener( phase = TransactionPhase.AFTER_COMMIT, fallbackExecution = true ) public void handleCreateTemplateMessageEvent(MessageByTemplateReques..
조회쿼리 작성시 연관관계를 갖는 경우, transform을 처음에 사용하려했었는데, 이 때 발견한 커넥션 leack 문제에 대해 포스팅하고자 한다. Querydsl transform()이란?transform()은 Querydsl에서 그룹핑된 데이터를 원하는 구조로 변환할 때 사용하는 메서드이다.일반적인 fetch()는 단순히 List 형태로 데이터를 반환하지만,transform()은 결과를 Map이나 DTO 등으로 그룹핑 및 가공해서 반환할 수 있게 해준다.groupBy().transform() 형태로 많이 사용됨 예를 들어, 아래처럼 1:N 관계의 데이터를 조회할 때하나의 작가가 여러 권의 책을 갖고 있을 때하나의 주문에 여러 주문상품이 연결되어 있을 때하나의 게시글에 여러 댓글이 달릴 때 등등 @E..
운영 중인 서비스에서 유저가 구매한 상품을 카드형태의 ui로 예쁘게.. 웹페이지로 제공하는 기능이 있었는데, 해당 페이지는 링크로 외부에 공유할 수 있어야 했다. 해당 페이지에서 사용되는 정보를 받는 api는 public으로 열 수 없는 정보들이라, url 생성시 쿼리스트링으로 필요데이터를 다 박는 형태로 처음에 구현이되었었다.https://ourdomain.com/share?userName=micky&productId=5&color=#9e8c8b&,,, // 등등 무지 길다(url 생성은 FE쪽에서 처리한 부분이라 이런식으로 구현되어있는지 몰랐다가, url 이 너무 길다는 qa 티켓이 올라와서 나도 같이 보게되었다. ㅋㅋ) 문제점민감 정보 노출userName, productId와 같은 정보가 URL에 ..
본 포스팅은 스프링으로 시작하는 리액티브 프로그래밍책을 참고하여 작성하였습니다. ( _ _) Blocking I/OI/O란?I/O(Input/Output)는 컴퓨터 시스템이 외부 세계(사용자, 디스크, 네트워크, 다른 프로그램 등)와 데이터를 주고받는 모든 과정을 뜻한다. 쉽게 말하면, "프로그램이 자기 안에서 계산만 하는 게 아니라, 밖과 소통하는 행위".Input: 외부에서 데이터를 받아오는 것예) 키보드 입력, 파일 읽기, 네트워크 요청 수신Output: 데이터를 외부로 내보내는 것예) 화면 출력, 파일 쓰기, 네트워크 응답 전송즉, System.out.println("Hello") 같은 콘솔 출력도 I/O고, DB 쿼리 실행도 I/O 만약 client가 서버에 데이터 요청을 했을 때, 서버가 추..
(ApplicationEventPublisher에 대한 고찰 글에서 다루지 않았던, Async, Transactional 관련 AOP 얘기를 더 해보자 한다,,) 운영 서비스에서 핵심 비즈니스 로직 이후에 알림, 로그 저장, 외부 연동 같은 부가 작업들을 처리해야 하는 경우가 많은데, 이런 부가 작업은 서비스 응답 속도나 안정성에 영향을 주지 않도록 비동기 + 트랜잭션 분리로 처리하는 것이 이상적이다. 그렇다면 어떻게 사용하는게 맞는걸까 ? AOP(Aspect-Oriented Programming)란?AOP는 관점 지향 프로그래밍이라고 하며, 로깅, 보안, 트랜잭션 같은 공통 기능(횡단 관심사)을 핵심 비즈니스 로직과 분리해서 관리할 수 있도록 도와주는 개념이다. (예시: 실행시간 측정 코드)@Aro..
현재 회사에서 진행중인 프로젝트가 api 서버를 먼저 만들고 admin 서버를 추후에(지금ㅋ) 만들고 있는데,그러다 보니 조회만 할 땐 문제없던 엔티티들이 어드민에서 CRUD를 하려니 JPA를 활용할 수 없는 등 문제가 발생해서(ㅠㅠ)그 중 고민했던 내용을 포스팅하고자 한다 List로 관리하는 경우(JPA에서 연관관계를 맺을 때 가장 흔하게 사용하는 방식)@Entitypublic class Author { @OneToMany(mappedBy = "author") private List events = new ArrayList(); @OneToMany(mappedBy = "author") private List awards = new ArrayList(); // ...} 장점순..