분류 전체보기 248

[프로그래머스/Java] 징검다리 건너기

https://school.programmers.co.kr/learn/courses/30/lessons/64062 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr for문(시간 초과), 슬라이딩 윈도우(시간 초과)카카오 공식 해설은 이분 탐색을 이용하라고 적혀 있었지만, 하기 싫었다. (..)질문 게시판을 보니, leetcode의 Sliding Window Maximum 문제와 유사하게 풀면 된다고 한다. import java.util.*;class Solution { public int solution(int[] stones, int k) { Deque deque = new Array..

[백준/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