전체 글 247

[백준/Java] 전화번호 목록

https://www.acmicpc.net/problem/5052 전에 풀 땐 문자열 비교해서 풀었는데, 이번에 트라이 써보려고 풀었다. 트라이는 문자열 검색을 빠르게 할 수 있는 자료구조이다.자료가 정수형일 때 이진탐색트리가 O(logN)의 시간복잡도를 가지는데,문자열일 땐 문자열의 길이가 M이면 O(MlogN) 이다.이때 트라이를 이용하면 O(M)에 해결할 수 있다. import java.io.*;import java.util.*;public class boj5052 { private static class Trie { boolean isEnd = false; Map child = new HashMap(); public void add(String num) ..

[프로그래머스/Java] 가장 큰 수

https://school.programmers.co.kr/learn/courses/30/lessons/42746 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 잘 안 풀려서 결국 답지를 봤다... import java.util.*;class pg42746 { public String solution(int[] numbers) { String[] snumbers = Arrays.stream(numbers) .mapToObj(number -> String.valueOf(number)) .toArray(String[]::new); ..

[프로그래머스/Java] 캐시

https://school.programmers.co.kr/learn/courses/30/lessons/17680 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 처음 코드import java.util.*;class Solution { public int solution(int cacheSize, String[] cities) { if (cacheSize == 0) { return 5 * cities.length; } Deque deque = new ArrayDeque(); Set set = new HashSet()..

[프로그래머스/Java] 의상

https://school.programmers.co.kr/learn/courses/30/lessons/42578 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 틀린 코드 import java.util.*;class Solution { private int answer = 0; private Map map1 = new HashMap(); private Map map2 = new HashMap(); private int cnt = 0; private int size; private int[] res; public int solution(S..

[프로그래머스/Java] 귤 고르기

https://school.programmers.co.kr/learn/courses/30/lessons/138476 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 처음 코드import java.util.*;public class Solution { private final int MAX = 10_000_000; private class Tangerine implements Comparable { private int type; private int cnt; public Tangerine(int type, int cnt) { th..

[프로그래머스/Java] 최솟값 만들기

https://school.programmers.co.kr/learn/courses/30/lessons/12941 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 틀린 코드 import java.util.*;import java.util.stream.*;class Solution{ public int solution(int []A, int []B) { List listA = Arrays.stream(A) .boxed() .collect(Collectors.toList())..

[Spring Boot] 동시성 제어 (4) - Redis

** 본 글은 인프런 재고시스템으로 알아보는 동시성이슈 해결방법> 을 수강한 후 작성한 글입니다.동시성 문제 해결 방법 3. RedisLettucesetnx 명령어를 활용하여 분산락 구현spin lock 방식: 락을 획득하지 못한 경우 락을 획득하기 위해 계속 요청을 보낸다.별도의 retry 로직 작성이 필요하다.Redissonpub/sub 방식: 채널을 하나 만들고 락을 점유 중인 스레드가 락을 획득하려고 대기 중인 스레드에게 해제를 알려주면, 안내를 받은 스레드가 락 획득을 시도한다.별도의 retry 로직 작성이 필요하지 않다.Redis 설치docker pull redisdocker run --name myredis -d -p 6379:6379 redisLettuce를 이용하여 재고 감소 로직 작성하..

✏️/Spring 2024.11.12

[Spring Boot] 동시성 제어 (3) - Database

** 본 글은 인프런 재고시스템으로 알아보는 동시성이슈 해결방법> 을 수강한 후 작성한 글입니다.동시성 문제 해결 방법 2. DatabaseMySQL 활용Pessimistic Lock실제로 데이터에 Lock을 걸어 정합성을 맞추는 방법데드락이 걸릴 수 있다.Optimistic Lock실제로 Lock을 사용하지 않고 버전을 이용함으로써 정합성을 맞추는 방법먼저 데이터를 읽은 후에 update를 수행할 때 현재 내가 읽은 버전이 맞는지 확인하며 업데이트Named Lock이름을 가진 metadata locking이름을 가진 Lock을 획득한 후 해제할 때까지 다른 세션은 이 Lock을 획득할 수 없도록 한다.트랜잭션이 종료될 때 Lock이 자동으로 해제되지 않기 때문에 별도의 명령어로 해제를 수행해주거나 선점..

✏️/Spring 2024.11.11

[Spring Boot] 동시성 제어 (2) - Synchronized

** 본 글은 인프런 재고시스템으로 알아보는 동시성이슈 해결방법> 을 수강한 후 작성한 글입니다.동시성 문제 해결 방법 1. SynchronizedSynchronized자바의 Synchronized 를 이용해보자.Synchronized 를 메서드 선언부에 붙여주면 해당 메서드는 한 개의 스레드만 접근이 가능하게 된다. @Transactionalpublic synchronized void synchronizedDecrease(Long id, Long quantity) { // Stock 조회 Stock stock = stockRepository.findById(id) .orElseThrow(() -> new RuntimeException("Stock을 조회할 수 없습니다.")..

✏️/Spring 2024.11.10