https://www.acmicpc.net/problem/1918입력 중위 표기식을 반복문으로 한 문자씩 확인=> 문자 유형(피연산자, 연산자 및 우선순위)에 따라 출력 및 Stack에 처리Stack에 남은 연산자들을 pop 하여 출력1) 피연산자 (알파벳)출
https://www.acmicpc.net/problem/28001) Stack으로 짝을 이루는 괄호 index (Pair) 저장2) 재귀 함수로 괄호 쌍을 제거 or 제거 안한 문자열 구하기종료 조건: 제거한 괄호 쌍 개수 == 전체 괄호 쌍 개수=> Set
https://www.acmicpc.net/problem/24931) 입력 각 탑의 높이를 배열 int\[] heights에 저장배열 index: 탑 번호 \[1] ~ \[n] 사용2) 왼쪽 탑 hegihts\[1] 부터 오른쪽 탑 heights\[n] 까지
https://www.acmicpc.net/problem/2164Queue에 1 ~ n 까지 차례로 저장 (1이 맨 앞)Queue에 카드 1개가 남을 때 까지 반복1) 맨 앞 카드를 remove2) 그 다음 맨 앞 카드를 뽑은 후, 다시 Queue에 넣음Que
https://www.acmicpc.net/problem/11581 ~ n 을 Queue에 저장한 후, 다음을 반복1) (k-1)명을 Queue에서 뽑아서, 다시 Queue에 넣음=> 앞에서부터 (k-1) 명을 Queue의 뒤로 보냄 2) 이후, 1명을 Que
https://www.acmicpc.net/problem/23461 ~ n 까지의 풍선을 Deque에 저장Deque이 empty 할 때까지 반복 1) 터뜨린 풍선의 값이 양수 k인 경우(k-1)개의 풍선을 덱의 First 에서 뽑아서 Last 로 넣음이후, 1
https://www.acmicpc.net/problem/5430Deque을 통해 주어진 R, D 함수 수행1) R 함수 (뒤집기)isReversed flag 변수 조정2) D 함수 (맨 앞 요소 삭제)isReversed == true (배열이 뒤집힌 상태)이
https://www.acmicpc.net/problem/19271) x > 0 인 경우PriorityQueue에 x 추가=> 최소값이 먼저 오도록 정렬2) x == 0 인 경우PriorityQueue가 not empty=> PriorityQueue에서 rem
https://www.acmicpc.net/problem/19271) x != 0 인 경우PriorityQueue에 x 추가=> 최소 절댓값이 먼저 오도록 정렬2) x == 0 인 경우PriorityQueue가 not empty=> PriorityQueue에서
https://www.acmicpc.net/problem/12018각 과목에 대해 수강 신청한 학생들의 마일리지들(마일리지 배열)을 높은 순으로 정렬정렬된 투자 마알리지 배열에서 얼마의 마일리지를 투자하면 최적인지 찾아서 PriorityQueue에 각 과목에
https://www.acmicpc.net/problem/2075입력 행렬의 모든 수를 1차원 배열에 저장배열 정렬하여, n 번째 큰 수 \[length - n] 출력int\[]: 행렬의 수들 저장행렬 입력: O(n^2)배열 정렬: O(N log N) (N:
https://www.acmicpc.net/problem/2075입력 강의들을 배열에 저장한 후, 시작 시간이 빠른 순으로 정렬현재 진행중인 강의들을 PriorityQueue에 저장시작 시간이 빠른 순으로 정렬된 강의 배열을 차례로 확인,PriorityQueu
https://www.acmicpc.net/problem/17551) 0 "zero" ~ 9 "nine" 을 String\[]에 저장2) for 문으로 m ~ n 사이의 정수들을 한 숫자(digit)씩 읽어서,정수의 값과 영어로 읽은 값을 Word\[]에 저장
https://www.acmicpc.net/problem/4358TreeMap<String, Integer> 사용=> Key: 나무 종 이름, Value: 해당 나무 종의 등장 횟수=> TreeMap으로 Key (나무 종 이름) 사전 순 정렬1) 입력 받
https://www.acmicpc.net/problem/21939문제 리스트의 문제 정보 입력 양식: "문제 번호, 난이도"=> '문제 번호'가 중복되는 문제 존재 X 하므로, '문제 번호'가 Key1) recommend xx == 1 이면, 가장 어려운 문
https://www.acmicpc.net/problem/14425문자열 집합에서 검색 문자열이 몇 개 있는지 개수 세기HashSet<String>: 입력 n개 문자열 (집합 S)1) 입력 n개 문자열 (집합 S) 저장: O(n)=> 최대 10^52) 집
https://www.acmicpc.net/problem/11725Tree를 직접 구현 X트리의 자식 노드 개수에 제한이 없음(이진 트리처럼 Left Child, Right Child 형식 X)노드의 연결 정보가 부모 - 자식 순서로 정해져서 입력되지 않음=>
https://www.acmicpc.net/problem/1991인접 리스트 List<Character>\[] lists에 트리 저장, 재귀 함수로 트리 순회 구현1) 트리의 노드 연결 정보를 인접 리스트 List<Character>\[] lists
https://www.acmicpc.net/problem/9934배열 int\[] tree에 트리 노드들 저장중위 순회 순서에서 루트 노드: 중간에 방문1) 루트 노드총 노드 개수 (2^k - 1) / 2 번째에 방문한 노드가 루트 노드inorder\[(2^k
https://www.acmicpc.net/problem/1167가중치 그래프(트리)에서 정점 간 거리 (간선 가중치) 특징가장 거리가 먼 두 정점이 v1, v2인 경우, 임의의 다른 정점 v_any와 가장 먼 정점은 v1 또는 v2이다.1) 임의의 정점과
https://www.acmicpc.net/problem/1068인접 리스트에 노드들 입력기존 트리의 Leaf 노드 개수를 구함DFS 로 노드를 삭제해가면서, Leaf 노드가 삭제되면기존 Leaf 노드 개수에서 빼줌예외 처리1) 삭제 노드가 루트 노드인 경우
https://www.acmicpc.net/problem/5639입력 전위 순회에서 부모 노드를 찾아서 Left Subtree, Right Subtree 로 나눔이진 탐색 트리 (Binary Search Tree, BST)Left Subtree 는 모두 부모
https://www.acmicpc.net/problem/3584루트 노드 찾기입력 트리 노드 정보가 "부모 노드 - 자식 노드" 형태로 주어짐트리 노드 정보 입력할 때, 자식 노드들을 방문 처리=> 입력이 끝난 후, 방문되지 않은 노드가 루트 노드1) 모든
https://www.acmicpc.net/problem/17609 1. 아이디어 2. 자료구조 3. 시간 복잡도 코드
https://www.acmicpc.net/problem/9935입력 문자열을 한 문자씩 차례로 StringBuilder에 담아가면서 확인폭발 문자열과 동일한 문자열이 StringBuilder에 존재하면, 삭제StringBuilder: 입력 문자열을 한 문자씩
https://www.acmicpc.net/problem/4889입력 문자열에서 한 문자씩 확인1) 여는 괄호 {는 Stack에 push2) 닫는 괄호 }Stack이 비어있지 않은 경우 (여는 괄호 존재)=> Stack에서 pop 하여 여는 괄호 + 닫는 괄호
https://www.acmicpc.net/problem/6550두 문자열 s, t의 문자를 가리키는 2개의 포인터 사용String s, String t: 입력 문자열int sPtr, int tPtr: s와 t의 문자를 가리키는 포인터O(문자열 t의 길이)=>
https://www.acmicpc.net/problem/2468행렬 입력하면서, 최대 지역 높이 저장브루트 포스로 가능한 비의 양 모두 확인=> DFS 반복=> 비의 양: 0 이상 최대 건물 높이 미만(비의 양 == 0 인 경우, 모든 지역이 안전 영역 =>
https://www.acmicpc.net/problem/145021) 추가할 벽 3개 위치 선택 => Backtracking2) 추가할 벽 3개 위치 선택 후, 입력 행렬을 0, 0 ~ n, m 차례로 확인바이러스 칸(2)이고 아직 방문 안한 경우, BFS
https://www.acmicpc.net/problem/15686행렬 입력하면서, 집과 치킨 집들의 좌표를 각각 리스트에 저장1) 전체 치킨 집들 중에서 중복없이 m개 치킨 집 선택2) 선택한 m개 치킨 집들에서 치킨 집 1개씩 확인각 집들을 기준으로, 각
https://www.acmicpc.net/problem/2961풀이 ①, ② 둘 다 브루트 포스 + 백트래킹 사용,백트래킹 구현에 약간의 차이브루트 포스 + 백트래킹: 백트래킹으로 조합(부분 집합)을 구성하고, 구성한 모든 경우를 확인n 개의 재료들 중에서
https://www.acmicpc.net/problem/14620\[0]\[0] ~ \[n-1]\[n-1]의 n^2 개 지점에서 씨앗을 최소 비용으로 심는 3개 지점 선택하기=> 중복 X, 순서 상관 X 하는 조합 Combination씨앗을 심을 수 있는 3
1. 아이디어 입력 그래프를 n x n 인접 행렬에 저장 (n: 정점 vertex 개수) => 대각 행렬 형태로 저장 e.g. 1 연결되면 3도 연결 1) DFS 재귀함수 재귀함수 종료 조건: 매 재귀에서 시작 vertex에 연결된 v
https://www.acmicpc.net/problem/19262중 for문으로 도화지 0 ~ n-1 확인=> 해당 지점이 그림(1, true)이고 아직 방문 안한 경우, 해당 지점을 기준으로 탐색 (DFS / BFS) 수행1) DFS재귀함수해당 지점을 기준
https://www.acmicpc.net/problem/16953BFS => Queue에서 이전 값을 꺼내서 2가지 연산 수행 1) 연산 결과 값 == B 이면, 탐색 성공 2) 연산 결과 값 < B 이면, Queue 에 추가 3) 연산 결과 값 > B
https://www.acmicpc.net/problem/10026본 문제는 단순히 탐색하는 영역의 수를 찾는 문제이므로, BFS가 더 쉬움입력 행렬을 0, 0 ~ n, n 차례로 확인=> 아직 방문 안했으면 BFS 탐색 시작=> Queue에 탐색 시작 좌표
https://www.acmicpc.net/problem/14940목표 지점으로부터 모든 지점으로의 거리 => BFS목표 지점으로부터 모든 지점을 향해 BFS 수행다음 지점이 갈 수 있는 땅(1)이고 아직 방문 안한 경우=> 탐색 확장,=> 각 지점으로의 거리
https://www.acmicpc.net/problem/1987시작 지점 0, 0 에서부터 DFS 시작다음 지점의 알파벳을 아직 방문 안한 경우, 탐색 확장탐색 확장하면서 이동 가능한 칸 최대 개수 갱신 (DFS 함수 파라미터로 전달)재귀 종료 조건: 다음
https://www.acmicpc.net/problem/12851BFS 로 최소 시간 갱신해가면서 탐색탐색 종료 조건=> 목표 지점(동생)까지 도달한 최소 시간 < 현재 위치까지 도달한 최소 시간다음 탐색 지점 추가 1) 다음 후보 지점이 범위 안에 있
https://www.acmicpc.net/problem/9466팀을 구성하든, 구성하지 못하든 마지막 순서의 노드는 순환을 이룸ex 1) 예제 입력 1에서, 2 → 1 → 3 → 3 (2, 1 은 팀을 못이루지만, 3은 혼자 팀을 이룸)ex 2) 예제 입력
https://www.acmicpc.net/problem/2668선택한 수들의 index, value가 싸이클을 구성하면 두 집합이 같음ex 1) 1 → 3 → 1선택한 수 index 집합: 1, 3선택한 수 value 집합: 3, 1ex 2) 5 → 5선택한
https://www.acmicpc.net/problem/2206최단 거리 => BFS벽을 부수지 않고 이동하는 경우, 벽을 부수고 이동하는 경우의 2가지 경우가 존재=> 방문 확인 배열을 통해 2가지 경우를 구분하여, 서로 다른 경로 간에 간섭하지 못하도록
https://www.acmicpc.net/problem/1600최단 거리 / 최소 동작 => BFS말 처럼 동작한 횟수에 따라 탐색 경로 구분 1) boolean\[]\[]\[] check: 해당 지점 좌표, 말 처럼 동작한 횟수로 구분 2) Queu
https://www.acmicpc.net/problem/2638맵의 지점이 외부 공기인지, 내부 공기인지를 구분해야 함"모눈종이의 맨 가장자리에는 치즈가 놓이지 않는 것으로 가정한다."=> 확정된 외부 공기인 map\[0]\[0] 부터 탐색 시작 (DFS /
https://www.acmicpc.net/problem/1325"A가 B를 신뢰" 하는 경우, B를 해킹하면 A도 해킹 가능=> 신뢰 관계 (방향이 있는 간선)을 따라 그래프 탐색=> 인접 리스트 List<Integer>\[] lists에 간선 정보 저
https://www.acmicpc.net/problem/17829n x n 행렬에 풀링 한 번 적용 => (n / 2) x (n / 2) 행렬n = 2^k 일 때, n x n 행렬을 1 x 1 로 만들기=> 풀링 k 번 반복재귀 함수를 이용한 분할 정복1)
https://www.acmicpc.net/problem/2448입력 n 만큼 출력 행전체 큰 삼각형을 봤을 때, 작은 삼각형 3개로 구성=> 상단 1개, 하단 좌측 1개, 하단 우측 1개각 상단, 하단 좌측, 하단 우측의 작은 삼각형들도같은 방식으로 각각의
https://www.acmicpc.net/problem/11047 1. 아이디어 2. 자료구조 3. 시간 복잡도 코드
https://www.acmicpc.net/problem/1931 1. 아이디어 2. 자료구조 3. 시간 복잡도 코드
https://www.acmicpc.net/problem/217583개의 케이스로 나누어서 각각 확인누적합을 미리 저장해둔 후,채집한 꿀 양 계산에 누적합을 활용case 1) 벌통 맨 오른쪽에 고정, 벌 1 맨 왼쪽 고정 => 벌 2 위치 선택벌 1 채집량:
https://www.acmicpc.net/problem/1052그리디 알고리즘가장 작은 물 양의 1L 짜리 물병부터 확인같은 양의 물병이 2개 이상 존재하면, 합침int\[] bottles에 물 양에 따른 물병 개수 저장그리디 알고리즘으로 풀이가 가능한 이유
https://www.acmicpc.net/problem/2212인접한 센서 간 거리가 먼 곳에 집중국을 설치해나감=> 인접한 센서 간 거리가 가장 먼 곳들을 분리하여, 집중국을 할당하는 느낌1) 센서 배열을 센서 위치 빠른 순으로 정렬2) 인접 센서 간 거리
https://www.acmicpc.net/problem/1493영역을 채울 수 있는 최대 크기의 큐브를 찾을 때,가장 큰 큐브부터 차례로 확인그리디 + 분할 정복1) 그리디넣을 수 있는 가장 큰 큐브부터 넣음큐브가 한변의 길이 2^k 인 정육면체 형태작은 큐
.PNG) https://www.acmicpc.net/problem/15649 1. 아이디어 2. 자료구조 3. 시간 복잡도 코드
.PNG) https://www.acmicpc.net/problem/15650 1. 아이디어 2. 자료구조 3. 시간 복잡도 코드
https://www.acmicpc.net/problem/1182백트래킹을 이용한 브루트 포스로 모든 조합에 대해 확인입력 수열의 원소 \[0] ~ \[n-1] 까지 차례로 확인각 원소에 대해 2가지 경우=> 선택 O / 선택 X재귀 종료 조건: 입력 수열의
https://www.acmicpc.net/problem/14712백트래킹을 이용한 브루트 포스로 모든 조합에 대해 확인넴모를 배치 및 삭제하는 순서 상관 X=> 2 x 2 가 없는 넴모의 배치 조합 수 찾기=> 백트래킹을 이용한 브루트 포스입력 행렬의 각 칸
https://www.acmicpc.net/problem/9663Backtracking 으로 가지치기를 해가며, 유망한 노드에 대해서만 확인행렬의 한 행씩 확인기본적으로, 퀸은 한 행에 1 개씩만 배치 가능=> 상하 직선 상으로 위협 X 해야하므로한 행에서 좌
https://www.acmicpc.net/problem/1920단순히 길이 n인 정수 배열에서 길이 m인 정수 배열의 target 원소를 1개씩 비교하는 완전 탐색=> O(m x n)=> m, n 최대값 대입: 10^5 x 10^5 = 10^10 >> 1억
https://www.acmicpc.net/problem/1789합 s 가 주어질 때, 자연수 개수 n이 최대가 되려면,합을 이루는 자연수 원소들의 값이 작은 순서로 구성되어야 함=> 1, 2, 3, 4, ... 와 같이 정렬된 배열 형태이진 탐색1 ~ end
https://www.acmicpc.net/problem/2512상한액 지정 액수에 따라, 지방 예산액이 정해짐=> 상한액을 1원 ~ m원까지 탐색완전 탐색할 경우, O(n x m) 으로 시간 초과 !!!=> 이진 탐색 수행Init Call: binarySea
https://www.acmicpc.net/problem/11663완전 탐색하는 경우1개 선분에 대해 n개 좌표 확인: O(n)m개 선분에 대해 n개 좌표 확인: O(n x m)=> n, m 최대값 대입: 10^5 x 10^5 = 10^10 >> 1억 (시간
https://www.acmicpc.net/problem/2805절단기 높이를 크게 설정할 수록, 가져가는 나무 길이가 작아짐=> 필요한 최소 나무 길이 m을 만족하는 절단기 최대 높이 구하기1 ~ maxHeight (입력 나무 최대 길이) 에 대해 이진 탐색
https://www.acmicpc.net/problem/1654이미 갖고있는 k개 랜선으로, 같은 길이의 n개 이상의 랜선으로 만드려 함만들 수 있는 최대 랜선 길이 구하기=> 길이를 몇으로 하여 n개 이상으로 만들지가 관건자르는 랜선 길이를 길게 할 수록,
https://www.acmicpc.net/problem/30790초 ~ (maxTime x m)초 범위에서 mid초에 대해, 심사 가능한 인원을 계산=> Init Call: binarySearch(0, maxTime \* m)maxTime x m: 최장 심사
https://www.acmicpc.net/problem/2110n개 집에 c개의 공유기 설치최대한 많은 곳에서 와이파이 사용하도록 설치인접한 두 공유기 사이의 거리를 최대로 하여 설치=> 출력: "가장 인접한 두 공유기" 사이의 최대 거리"c개의 공유기를 n
https://www.acmicpc.net/problem/2174Robot 클래스 정의=> 로봇의 위치, 방향 저장Command 클래스 정의=> 명령을 내릴 로봇 번호, 명령 종류, 반복 횟수 저장1) 방향 전환: L, RL: E -> N -> W -> S -
https://www.acmicpc.net/problem/14891각 톱니바퀴 별, 톱니의 상태를 배열에 저장=> int\[]\[] gears=> gears\[톱니바퀴 번호]\[톱니 번호]: 해당 톱니바퀴의 톱니 상태회전시킬 톱니바퀴를 회전 시키기 전,연쇄적으
https://www.acmicpc.net/problem/11660입력 행렬을 입력 받으면서, 각 행 마다 누적합을 계산1행 누적합 원소, 2행 누적합 원소, ..., n행 누적합 원소int\[]\[] sum영역 (x1, y1) ~ (x2, y2)의 합= (행
https://www.acmicpc.net/problem/94651) 규칙어떤 위치의 스티커를 떼면, 다음 오른쪽 1칸 대각선 or 오른쪽 2칸 대각선 위치의 스티커 뗄 수 있음① 윗 행의 스티커 \[0]\[j]를 뗐을 경우그 다음 뗄 수 있는 스티커는 \[1
https://www.acmicpc.net/problem/19321) 규칙맨 위 칸 -> \[i]\[j] 칸 까지 내려올 때, 최대 합= 그 이전 대각선 왼쪽 위 or 대각선 오른쪽 위 까지 내려올 때, 둘 중 최대 합인 칸으로부터 \[i]\[j] 본인을 더
https://www.acmicpc.net/problem/9251LCS (Longest Common Subsequence, 최장 공통 부분 수열)부분 문자열 순서 상관 O연속 X 해도 가능각 입력 문자열 최대 길이: 10^3=> O(len^2) 까지 시간 복잡
https://www.acmicpc.net/problem/128650-1 Knapsack ProblemItem 을 쪼갤 수 없으므로, DP 로 풀이<=> Item 을 쪼갤 수 있는 Fractional Knapsack Problem 은 Greedy 로 풀이
https://www.acmicpc.net/problem/1149\[i]번째 집=> \[i-1], \[i+1]번째 집의 색과 달라야 함1번 ~ n번 집까지 색을 칠해나갈 때,\[i]번 집은 이전 \[i-1]번 집의 색과 다른 2가지 색 중에서 선택=> 차례대로
https://www.acmicpc.net/problem/2293int\[]\[] dp 사용 시, 메모리 초과 발생 (메모리 제한 4 MB)1) DP 배열 정의: int\[]\[] dpdp\[i]\[j]: 첫 번째 ~ \[i]번째 동전으로 목표 가치 합 j를
https://www.acmicpc.net/problem/2133dp\[i]: (3 x i) 크기의 벽을 채우는 경우의 수(3 x 홀수) 크기의 벽은 채울 수 없음=> (3 x 짝수) 크기의 벽만 고려=> dp\[짝수 index]만 사용① (3 x 2) 크기의
https://www.acmicpc.net/problem/2559"연속적인 며칠 동안의 온도의 합이 가장 큰 값 ~ ?"=> 연속하다는 특징 이용 가능하므로, 투 포인터 사용최초 앞에서부터 k 개의 합을 구함2개의 포인터 ptr1, ptr2가 각각 \[0],
https://www.acmicpc.net/problem/1806"연속된 수들의 부분합 ~"=> 연속하다는 특징 이용가능하므로, 투 포인터 사용2개의 포인터 ptr1, ptr2 모두 \[0]에서 시작ptr2가 마지막 원소를 넘어갈 때까지 다음을 반복1) 원소
https://www.acmicpc.net/problem/20922n 최대값: 2 x 10^5=> 시간 복잡도 O(n^2) 미만이어야 함 (n x n 의 2중 for 문 사용 X)"연속" 부분 수열=> 연속하다는 특징 이용가능하므로, 투 포인터 사용2개의 포인
https://www.acmicpc.net/problem/1753다익스트라한 노드 -> 다른 모든 노드로의 최단거리음이 아닌 간선의 가중치1) 비용 배열, 우선순위 큐 초기화dist\[]: 시작 노드 거리 0, 나머지 노드 무한대pq: (시작 노드, 0) 추가
https://www.acmicpc.net/problem/1504case 1) 1번 노드 -> v1 노드 -> v2 노드 -> n번 노드1번 노드 -> v1 노드 최단경로 다익스트라v1 노드 -> v2 노드 최단경로 다익스트라v2 노드 -> n번 노드 최단경로
https://www.acmicpc.net/problem/2665단순히 시작 지점 \[0]\[0] -> 끝 지점 \[n-1]\[n-1]으로의 최단경로는 BFS로 해결 가능.하지만, 방을 바꾸는 최소 개수에 해당하는 경로는 최단경로가 아닐 수 있음시작 지점으로부
https://www.acmicpc.net/problem/13549목표 지점을 찾으면 탐색을 종료하는, 일반적인 DFS, BFS는 간선의 가중치가 모두 같아야 함.하지만, 본 문제는 +1, -1 로 가는 경우 가중치가 1,x2 로 가는 경우 가중치가 0 으로
https://www.acmicpc.net/problem/11404플로이드-와샬모든 노드 -> 다른 모든 노드로 갈 때, 최소 비용음의 가중치 가능1) 비용 배열 초기화cost\[i]\[i] = 0, 나머지 cost\[i]\[j] = INFINF = (노드 최
https://www.acmicpc.net/problem/2660\[i]번 회원의 점수 = 가장 먼 회원과의 거리 (최대 거리)모든 회원(노드) -> 다른 모든 회원(노드)의 거리=> 플로이드-와샬1) 비용 배열 초기화dist\[]\[] 모든 원소 INF로 초
https://www.acmicpc.net/problem/1389케빈 베이컨의 수 = "모든 사람과 케빈 베이컨 게임을 했을 때, 나오는 단계의 합"모든 노드 -> 나머지 모든 노드=> 플로이드-와샬\[i]번 노드의 케빈 베이컨 수 = \[i]행 dist\[i
https://www.acmicpc.net/problem/11403모든 정점 -> 다른 모든 정점으로 탐색=> 플로이드-와샬예외처리) 노드 본인에서 출발하여 다시 되돌아오는 싸이클 구성하는지 확인 필요비용 배열 초기화 시, 노드 본인 -> 본인의 비용dist\
https://www.acmicpc.net/problem/1956각 도시(노드)에서 출발하여, 해당 도시(노드)로 돌아오는 싸이클의 최소 가중치 합모든 노드 -> 나머지 다른 모든 노드의 최단경로=> 플로이드-와샬 (dist\[i]\[i] = 0 초기화)모든
https://www.acmicpc.net/problem/20115규칙에 따라 합친 최종 에너지 드링크의 양을 최대로 만들기=> 절반을 버리고 합치므로, 절반을 버리는 드링크는 양이 작아야 함규칙: 가장 작은 양의 드링크의 절반을 가장 큰 양의 드링크에다 부어
https://www.acmicpc.net/problem/1092각 크레인의 최대 무게 리스트, 각 박스의 무게 리스트를 큰 순으로 정렬가장 큰 무게의 박스, 가장 큰 무게의 크레인부터 확인1) 해당 박스를 해당 크레인으로 옮길 수 있는 경우해당 박스를 박스
https://www.acmicpc.net/problem/11051) L 의 전체 자릿 수 != R 의 전체 자릿 수인 경우8의 최소 개수는 02) L 의 전체 자릿 수 == R 의 전체 자릿 수인 경우높은 자릿 수 부터 각 동일 자릿 수를 비교하여, 8로 같
https://www.acmicpc.net/problem/1461모든 책을 제자리에 놔둔 후, 다시 원점 0 으로 돌아올 필요 X=> 가장 먼 거리의 m개 책을 마지막에 놔두고 종료해야 함1) 각 책의 위치 리스트를 거리가 먼(절댓값이 큰) 순으로 정렬음수 위
https://www.acmicpc.net/problem/7983각 과제의 시작일, 종료일은 서로 겹치지 않아야 함e.g. 예제 1에서 과제1의 종료일은 7일, 과제2의 종료일은 8일로 서로 안겹치게 배치됨1) 과제 객체(과제 소요일 d_i, 과제 마감일 t_
https://www.acmicpc.net/problem/1715n개 카드 묶음의 경우, 총 (n-1)번 합침2개 카드 묶음을 합치고,합쳐진 카드 묶음은 또 다시 다른 카드 묶음과 합침=> 최소 비교 횟수로 모두 합치려면, 적은 카드 묶음끼리 합쳐나가야 함=>
https://www.acmicpc.net/problem/2437n개의 추들의 조합으로 만들 수 없는 최소 무게 구하기① n개 추들의 조합으로 만들 수 있는 "최대 무게" = 모든 추들의 무게 합② n개 추들의 조합으로 만들 수 없는 "최대 무게" = 모든 추
https://www.acmicpc.net/problem/13164인접한 인원의 키 차이가 큰 경우=> 큰 키의 인원을 1명 조로 분리하여, 비용 합 최소화인접 인원의 키 차이가 큰 순으로 (k-1)개 선택하여 조 분리1) 인접한 인원들 끼리의 키 차이를 모두
https://www.acmicpc.net/problem/1106적어도 c명 영업 => c명, c+1명, ..., c+100명(입력: 1개 도시에서 x원으로 영업하는 최대 고객 수 = 100명)적어도 c명을 늘리기 위한 최소 금액=> c명, c+1명, ...,
https://www.acmicpc.net/problem/17485출발 지점 -> 각 지점으로의 최소 비용 값을 DP 배열에 채워나감3가지 이동 방향: 왼쪽 아래, 아래, 오른쪽 아래=> 각 지점을 각 이동 방향으로 이동 했을 때, 최소값을 저장ex) (3,
https://www.acmicpc.net/problem/14722 1. 아이디어 우유 순서: 딸기(0) -> 초코(1) -> 바나나(2) 최근에 마신 우유 종류에 따라 현재 위치의 우유를 마실 수 있는지 여부가 결정됨 => "최근 마신 우유 종류를 구분"하여,
https://www.acmicpc.net/problem/1520오답 노트 - 처음 생각한 DFS + DP 풀이 방식dp\[y]\[x]: 시작 지점 \[0]\[0] -> \[y]\[x] 지점으로 내리막 길로 가는 경로 개수=> Bottom-UP 방식dp\[y]
https://www.acmicpc.net/problem/1082dp\[cost]: cost원 금액 내로 만들 수 있는 최대 숫자 문자열출력, 최대 숫자: BigInteger(dp\[m])=> dp\[] 원소에 Leading-Zero 문자열이 저장될 수 있으므
https://www.acmicpc.net/problem/10942회문 판단 1번: O(len / 2) (len: 문자열 길이)길이 n 문자열에 대해 회문 판단 m번: O( (n / 2) x m )=> n, m 최대값 대입: 10^3 x 10^6 = 10^9
https://www.acmicpc.net/problem/174041번째 집과 마지막 n번째 집의 색이 달라야 함1번 집의 색을 고정하고, 다음 집의 색을 차례대로 정해나감ex) 1번 집을 R 색으로 칠하고, 다음 집들을 이전 집 색과 다른 2개 색 중 하나로
https://www.acmicpc.net/problem/9252dp\[i]\[j]: str1\[i] 문자까지와 str2\[j] 문자까지에 대한 LCS 문자열출력, LCS 문자열: dp\[str1.length()]\[str2.lenength()]2중 for문으