반응형
[프로그래머스] 사칙연산 (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 방식 풀이  이 문제에서 주의할 점은 사칙연산에서 +는 결합 법칙이 성립하지만, -는 결합법칙이 성립하지 않는다는 부분이다 그렇기 때문에 각 구간별 최대값, 최소값을 구한 후 경우의 수를 고려해야 한다 출처. 나무 위키한 식에서 연산이 두 번 이상 연속될 때, 앞쪽의 연산을 먼저 계산한 값과 뒤쪽의 연산을 ..

[프로그래머스] N으로 표현  (Java, DP, lv3)
알고리즘/동적 프로그래밍2024. 7. 23. 20:36[프로그래머스] N으로 표현 (Java, DP, lv3)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/42895# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이- 동적 프로그래밍 (Dynamic Programming)- 숫자 N과 사칙연산을 사용해서 number가 만들어지는 N의 사용횟수(1 ~ 8개) 최소값을 구하는 문제- List 컬렉션에 Set 자료구조를 사용하여 중복을 제거하고, 연산 결과를 자리수마다 담을 수 있도록 하였다List> data = new ArrayList();for(int i = 0; i ());}  우선 첫 자..

[프로그래머스] 등굣길 (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;..

[프로그래머스] 징검다리 (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, lv3)
알고리즘/자료구조2024. 7. 19. 13:23[프로그래머스] 디스크 컨트롤러 (Java, Heap, lv3)

문제 출처 https://school.programmers.co.kr/learn/courses/30/lessons/42627 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 문제 풀이습관처럼 우선 순위 큐에 다 넣고, 정렬을 했었는데 경쟁을 할 때 다음 노드들의 값을 갱신 어떻게 해야 할지에서 막혀서 많은 시간 낭비를 하였다 (습관과 사고를 고쳐야 하는데 .. ) 예제 입력 jobs : [[0, 3], [1, 9], [2, 6]]result : 9 단순히 작업 시간 순으로 정렬한다고 해서 결과값을 구할 수 없었다10ms(= (3 + 11 + 16) / 3)  ..

[프로그래머스] 더 맵게 (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((..

[BOJ21942] 부품 대여장 (자료구조, 해시맵)
알고리즘/자료구조2024. 5. 14. 20:55[BOJ21942] 부품 대여장 (자료구조, 해시맵)

문제 링크 https://www.acmicpc.net/problem/21942 문제 풀이직접 풀이 못함, 월별 일수 계산하는 방법 알게 되어 기록 - 문자열로 된 날짜 데이터 변환이 어려운 문제였다.- 구현 로직은 Map 자료구조를 사용하여 상대적으로 간단했다- 시간복잡도: O(N)  (Map 자료구조를 사용해서 O(1)에 추가/삭제 가능)  [핵심 로직]- Map에 닉네임과 부품(key) 정보가 없는 경우 대여 이므로 HashMap 에 데이터 추가 한다- Map에 닉네임과 부품(key) 정보가 있는 경우 반납 이므로 HashMap 제거 후 패널티 계산 수행한다- 벌금의 경우에도 Map 자료구조 사용하여 {key: 닉네임, value: 벌금} 형태로 기록한다  실수 1. 최대치 long- 문제에서 yyy..

[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..

[BOJ13911] 집 구하기 (최단경로, 다익스트라)
알고리즘/최단 경로2024. 3. 14. 10:24[BOJ13911] 집 구하기 (최단경로, 다익스트라)

문제 링크 https://www.acmicpc.net/problem/13911 13911번: 집 구하기 첫줄에는 정점의 개수 V(3 ≤ V ≤ 10,000)와 도로의 개수 E(0 ≤ E ≤ 300,000)가 주어진다. 그 다음 E줄에 걸쳐 각 도로를 나타내는 세 개의 정수 (u,v,w)가 순서대로 주어진다. 이는 u와 v(1 ≤ u,v ≤ V)사 www.acmicpc.net 문제 풀이 - 다익스트라 알고리즘 - 맥세권과 스세권을 만족하는 최소 최단 거리 합 구하는 문제 (없는 경우 -1 출력) - 맥도날드와 스타벅스 각각 시작점으로 최단 경로 구할 경우 시간 초과 발생 가능 - MultiSource BFS 아이디어 응용해서 총 2번 다익스트라 실행 ① 모든 맥도날드를 시작점으로 집까지의 최단 거리 ② 모..

[BOJ2211] 네트워크 복구 (최단 경로, 다익스트라, 그래프)
알고리즘/최단 경로2024. 3. 12. 21:51[BOJ2211] 네트워크 복구 (최단 경로, 다익스트라, 그래프)

문제 링크 https://www.acmicpc.net/problem/2211 2211번: 네트워크 복구 첫째 줄에 두 정수 N, M이 주어진다. 다음 M개의 줄에는 회선의 정보를 나타내는 세 정수 A, B, C가 주어진다. 이는 A번 컴퓨터와 B번 컴퓨터가 통신 시간이 C (1 ≤ C ≤ 10)인 회선으로 연결되어 있다 www.acmicpc.net 문제 풀이 - 다익스트라 + 백트래킹 - 양방향 그래프 - N(노드) 최대 1,000, C (비용) 최대 10 이므로 최대치는 10,000이므로 int로 처리가능 - 루트 노드가 1번일 때, 다른 노드를 모두 연결하기 위해서는 N - 1개의 간선이 필요하다 (트리 생각하기!) - 최단 경로를 갱신하면서 parent 배열에 이전 노드에 대한 정보 기록 (pare..

[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 ..

반응형
image