반응형
[프로그래머스] 사칙연산 (Java, DP, lv4)
알고리즘/동적 프로그래밍2024. 7. 24. 12:15[프로그래머스] 사칙연산 (Java, DP, lv4)

문제 출처https://school.programmers.co.kr/learn/courses/30/lessons/1843# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이- 동적 프로그래밍 (dynamic progamming)- bottom-up 방식 풀이  이 문제에서 주의할 점은 사칙연산에서 +는 결합 법칙이 성립하지만, -는 결합법칙이 성립하지 않는다는 부분이다 그렇기 때문에 각 구간별 최대값, 최소값을 구한 후 경우의 수를 고려해야 한다 출처. 나무 위키한 식에서 연산이 두 번 이상 연속될 때, 앞쪽의 연산을 먼저 계산한 값과 뒤쪽의 연산을 ..

[프로그래머스] 등굣길 (Java, DP, lv3)
알고리즘/동적 프로그래밍2024. 7. 23. 13:57[프로그래머스] 등굣길 (Java, DP, lv3)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/42898 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이- 동적 프로그래밍 (Dynamic Programming) 문제 - 시간 복잡도 : O(NM) - 격자형 그래프가 주어졌을 때 (1,1) -> (n, m)으로 이동하는 경우의 수를 구하는 문제- 이때 이동 방향은 오른쪽과 아래쪽으로만 이동가능하다 ① dp 배열을 정의하고, 물 웅덩이 영역을 -1로 표시한다 (이때 puddles가 m,n으로 주어져서 주의 필요)int row = n;..

[Spring Boot] Simple Cache, EhCache(v3.10.8) 간단 테스트 해보기
공부/Spring2024. 7. 22. 15:31[Spring Boot] Simple Cache, EhCache(v3.10.8) 간단 테스트 해보기

캐시란?- 데이터나 값을 미리 복사해놓는 임시 저장소- 시스템 성능을 향상시키기 위한 메커니즘 - 캐시에 데이터를 저장하고 엑세스하는 프로세스이다 캐시를 사용해야 하는 이유① 데이터 접근이 빠르고 비용이 저렴② 애플리케이션 성능이 향상됨③ 응답이 빠름④ 메모리에 데이터 접근하는게 DB에서 가져오는 것보다 항상 빠름⑤ 비용이 많은 백엔드 요청이 줄어듦 캐시에 데이터를 미리 복사해 놓음으로써 처리/접근 시간(비용) 없이 빠른 속도로 데이터 접근할 수 있다 언제 사용- 자주 변경되지 않는 데이터- 원본 데이터에 접근/처리 시간이 오래 걸리는 경우 캐싱 종류 ① 인메모리 캐싱 (ex. Redis)② 데이터베이스 캐싱 (ex. hibernate 1차 캐시)③ 웹 서버 캐싱 - HTTP Cache : 브라우저/프록..

[프로그래머스] 징검다리 (Java, Parametric Search, lv4)
알고리즘/이진탐색2024. 7. 22. 12:38[프로그래머스] 징검다리 (Java, Parametric Search, lv4)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/43236 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이- 처음 int[] rocks에서 n개의 바위를 제거하는 조합을 구하는 방식을 생각했으나 50,000C25,000으로 시간 초과 예상 - 이진 탐색 중 매개변수 탐색으로 할 경우 N * log(1억) = 50,000 * 30 시간 복잡도로 풀이 가능 절차- (중요*) int[] rocks를 오름차순 정렬 (ex. [2, 11, 14, 17, 21] )- L과 R의 범위를 지정- 바..

[프로그래머스] 더 맵게 (Java, Heap, lv2)
알고리즘/자료구조2024. 7. 19. 11:35[프로그래머스] 더 맵게 (Java, Heap, lv2)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/42626 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이모든 음식의 스코빌 지수를 K 이상으로 만들기 위해 스코빌 지수 가장 적은 두 가지 음식을 섞어 새로운 음식을 만든다 섞은 음식의 스코빌 지수 = 가장 맵지 않은 음식의 스코빌 지수 + (두 번째로 맵지 않은 음식의 스코빌 지수 * 2) - K 이상 음식을 만들 수 있는 최소 턴 수 (만약 모두 섞었는데 못 구하는 경우 -1 리턴) - 우선 순위 큐, PriorityQueue 사용..

[프로그래머스] 아이템 줍기 (BFS, Java, lv3)
알고리즘/그래프 탐색2024. 7. 18. 21:07[프로그래머스] 아이템 줍기 (BFS, Java, lv3)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/87694 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  문제 풀이- 격자형 그래프 문제 (BFS)- rectangle의 원소는 각 직사각형의 [좌측 하단 x, 좌측 하단 y, 우측 상단 x, 우측 상단 y] 좌표 형태로 주어진다- 직사각형 외곽 테두리를 통해 시작 (x, y) 에서 도착 (x,y) 까지 최단 거리를 구한다  문제 예시1에서 (3,5) -> (4,5)로 가야하는데 (3,6)으로 가버려서 15(오답)이 나와 시간 소비를 많이 했다..

[프로그래머스] 퍼즐 조각 채우기 (Java, BFS, lv3)
알고리즘/그래프 탐색2024. 7. 18. 16:43[프로그래머스] 퍼즐 조각 채우기 (Java, BFS, lv3)

문제 출처https://school.programmers.co.kr/learn/courses/30/lessons/84021 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이 요약 1. game_board의 빈 영역(0)과 table의 블록 영역(1)을 구한다2. 빈 영역에 블록이 끼워지는지 회전하며 최대 4번 비교한다3. 블록이 빈 영역에 끼워질 경우 결과값에 블록 크기를 누적하고, 사용처리한다 (2-3 반복)  ① game_board 의 빈 영역(0), table 에 블록 영역(1)을 BFS 로 구한다List> emptySpace = new Arra..

[프로그래머스] 주식 가격 (Java, lv2)
알고리즘/자료구조2024. 7. 17. 21:05[프로그래머스] 주식 가격 (Java, lv2)

문제 출처https://school.programmers.co.kr/learn/courses/30/lessons/42584 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr  문제 풀이초 단위로 기록된 주식 가격이 담긴 배열 prices가 주어질때 가격이 떨어지지 않는 기간은 몇초인지 return- 제한 사항 int[] prices의 길이는 2 이상 100,000 이하 - O(n^2)으로 풀이시 O(10^10) 발생 가능- 스택을 사용하여 O(N) 풀이, 인덱스 번호를 스택에 넣는다는 아이디어를 생각하지 못했다. prices : [1, 2, 3, 2, 3]ret..

알고리즘/기초수학2024. 7. 11. 19:07[프로그래머스] 배열의 길이를 2의 거듭제곱으로 만들기 (Java, lv0)

문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/181857 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이int[] arr 주어질 때 길이가 2의 거듭 제곱이 되도록 하고, 빈 공간은 정수 0으로 채운다 비트 연산자를 사용해서 2의 거듭 제곱 길이를 구한다① arr 길이가 4인 경우 : 4 & 3 == 0 이 true가 되서 4가 반환② arr 길이가 6인 경우 : n보다 커질때까지 result 값을 2배씩 증가해서 8을 반환private int size(int n) { if((..

[Java] TreeSet 주요 메소드 살펴보기
알고리즘/자료구조2024. 5. 8. 15:12[Java] TreeSet 주요 메소드 살펴보기

TreeSet ? - Java Collection Framework 제공하는 자료구조- 이진 탐색 트리(binary search tree)로 구현 - 시간복잡도 : O(logN)  (HashSet의 경우 O(1))- 범위 탐색과 정렬에 유리 - Collection, Set 에서 제공하는 기본 메소드 또한 사용 가능- 중복 허용 X- null 허용 X (NPE 발생)- 정렬 기준의 경우 객체의 Comparable이나 TreeSet 생성자에 Comparator 초기화하여 사용- thread-safe 하지 않다 생성자- 내부적으로 Map 자료 구조를 사용하고, 아래와 같이 생성자를 제공한다 - 인자가 없는 기본 생성자를 사용할 경우 TreeMap으로 생성된다private transient NavigableMa..

[넥스트스탭] 자동차 경주 게임 - 자바 플레이 그라운드
공부/Java2024. 4. 30. 17:11[넥스트스탭] 자동차 경주 게임 - 자바 플레이 그라운드

깃 저장소학습 전https://github.com/ljw1126/my-java-racingcar-playground/tree/myself/src/main/java 학습 후https://github.com/ljw1126/my-java-racingcar-playground/tree/practice/src/main/java복습 - 자동차 경주 게임[기능 요구사항]① 각 자동차에 이름을 부여할 수 있다. (이때 자동차 이름은 5자를 초과할 수 없다)② 자동차 이름은 쉼표(,)를 기준으로 구분한다③ 전진하는 조건은 0에서 9사이에서 random값을 구한 후 값이 4이상인 경우이다④ 게임 종료 후 우승자를 출력한다. (이때 우승자는 한명 이상일 수 있다) [실행 결과]경주할 자동차 이름을 입력하세요(이름은 쉼표(,..

[넥스트스탭] 숫자 야구 게임 - 자바 플레이 그라운드
공부/Java2024. 4. 30. 17:11[넥스트스탭] 숫자 야구 게임 - 자바 플레이 그라운드

강의 링크 https://edu.nextstep.camp/c/9WPRB0ys/ 플레이그라운드 edu.nextstep.camp깃 허브 저장소학습 전https://github.com/ljw1126/my-java-baseball-playground/blob/myself/src/main/java 학습 후https://github.com/ljw1126/my-java-baseball-playground/tree/practice/src/main/java학습 전 직접 작성한 코드 (펼처보기)반성)① 객체 지향적 언어를 사용하면서도, 거리가 먼 절차적 코드를 작성② 절차적 코드로 인해 한 눈에 로직을 파악하기 힘듦 (가독성 저하)③ 테스트 코드 미작성④ 클래스 미분리 - view, model, controller⑤ 의미..

[BOJ2011] 암호코드 (다이나믹 프로그래밍)
알고리즘/동적 프로그래밍2024. 2. 27. 12:38[BOJ2011] 암호코드 (다이나믹 프로그래밍)

문제 링크 https://www.acmicpc.net/problem/2011 2011번: 암호코드 나올 수 있는 해석의 가짓수를 구하시오. 정답이 매우 클 수 있으므로, 1000000으로 나눈 나머지를 출력한다. 암호가 잘못되어 암호를 해석할 수 없는 경우에는 0을 출력한다. www.acmicpc.net 풀이 시간 복잡도 ① bottom-up : O(N) ② top-down : O(N) 문제) A를 1이라고 하고, B는 2로, 그리고 Z는 26이라 할 때, 25114 암호가 주어지면 아래의 6가지 경우가 나온다 - "BEAAD" : 2/5/1/1/4 - "BEAN" : 2/5/1/14 - "BEKD" : 2/5/11/4 - "YAAD" : 25/1/1/4 - "YAN" : 25/1/14 - "YKD" :..

[BOJ15991] 1,2,3더하기 6(동적 프로그래밍)
알고리즘/동적 프로그래밍2024. 2. 26. 20:56[BOJ15991] 1,2,3더하기 6(동적 프로그래밍)

문제 링크 https://www.acmicpc.net/problem/15991 15991번: 1, 2, 3 더하기 6 각 테스트 케이스마다, n을 1, 2, 3의 합으로 나타내는 방법의 수를 1,000,000,009로 나눈 나머지를 출력한다. www.acmicpc.net 풀이 시간 복잡도 : O(N) 문제) 정수 4를 1, 2, 3의 합으로 나타내는 방법은 총 3가지가 있다. 합을 나타낼 때는 수를 1개 이상 사용해야 한다. 단, 합은 대칭을 이루어야 한다. 1 + 1 + 1 + 1 1 + 2 + 1 2 + 2 대칭을 이루는게 포인트이기 때문에 아래와 같이 구하면 되었다 - DP[N - 2] 양 옆에 1씩 더하는 경우 - DP[N - 4] 양 옆에 2씩 더하는 경우 - DP[N - 6] 양 옆에 3씩 더..

[BOJ2263] 트리의 순회(분할 정복)
알고리즘/트리2024. 2. 24. 10:58[BOJ2263] 트리의 순회(분할 정복)

문제 링크 https://www.acmicpc.net/problem/2263 2263번: 트리의 순회 첫째 줄에 n(1 ≤ n ≤ 100,000)이 주어진다. 다음 줄에는 인오더를 나타내는 n개의 자연수가 주어지고, 그 다음 줄에는 같은 식으로 포스트오더가 주어진다. www.acmicpc.net 풀이 postorder(후위 순회, 왼쪽-오른쪽 -루트) - 항상 root가 마지막에 위치(*특징) - 트리의 특성상 root를 기준으로 왼쪽/오른쪽 서브트리가 나누어지게 때문에 postorder 통해 트리의 root 파악 가능 inodrer(중위 순회, 왼쪽-루트-오른쪽) - root를 기준으로 왼쪽/오른쪽 서브 트리가 나누어진다 - postorder로 구한 root 값으로 inorder의 왼쪽/오른쪽 서브 트..

[Java] PriorityQueue(우선 순위 큐) 분석하고, 따라 구현해보기
알고리즘/자료구조2024. 2. 12. 22:03[Java] PriorityQueue(우선 순위 큐) 분석하고, 따라 구현해보기

우선 순위 큐 (Priority Queue)최소 혹은 최대값을 효율적으로 찾을 수 있는 자료 구조 - 시간 복잡도 :  O( log₂N) - 힙(완전 이진 트리) 자료 구조 기반 구현  - (사전에 정렬할 필요 없이) 데이터 삽입/삭제 시 우선 순위에 따라 빠르게 접근/삭제 가능하다① 최소 힙 : 부모 노드 ≤ 자식 노드 ② 최대 힙 : 부모 노드 ≥ 자식 노드 참고. 부모-자식 인덱스 구하는 공식루트가 0번 인덱스부터인 경우① 부모 노드 = (현재 노드 - 1) / 2② 왼쪽 자식 노드 = (부모 노드 * 2) + 1③ 오른쪽 자식 노드 = 왼쪽 노드 + 1   구현해보기java.util.PriorityQueue 에서 간단하게 필요한 부분만 추출하였다public class MyPriorityQueue ..

[Java] Queue (By ArrayDeque) 따라 구현해보기
알고리즘/자료구조2024. 2. 12. 20:26[Java] Queue (By ArrayDeque) 따라 구현해보기

ArrayDeque 클래스 특징① 자바 1.6 추가② 내부적으로 가변길이 배열(Resizable-array)로 데이터 관리, 용량 제한 없음③ Thread-safe 하지 않음④ Null element 금지⑤ Stack 으로 사용할시 Stack 클래스 빠르고, Queue로 사용할 시 LinkedList 클래스보다 빠르다This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue.  ArrayDeque를 Queue로 활용하는 경우 아래의 네가지 장점을 생각해 볼 수 있다① 더 높은 성능 지원 - 내부적으로 배열을 사용하여 큐를 구현하기 때문에 빠른 접근 시간을 제공..

[Java] Stack (By ArrayDeque) 따라 구현해보기
알고리즘/자료구조2024. 2. 12. 19:40[Java] Stack (By ArrayDeque) 따라 구현해보기

ArrayDeque 클래스 특징① 자바 1.6 추가② 내부적으로 가변길이 배열(Resizable-array)로 데이터 관리, 용량 제한 없음③ Thread-safe 하지 않음④ Null element 금지⑤ Stack 으로 사용할시 Stack 클래스보다 빠르고, Queue로 사용할 시 LinkedList 클래스보다 빠르다This class is likely to be faster than Stack when used as a stack, and faster than LinkedList when used as a queue. - 공식 doc  참고. Stack 클래스 단점자바 1.0에 추가되었고, Vector 클래스를 상속받고 있다 -- LIFO (Last In First Out) - 멀티 스레드 환경에서..

반응형
image