[C++] 트라이(Trie)
Β·
πŸ“ Computer Science/✏ Algorithm
트라이(Trie) μ—¬λŸ¬ λ¬Έμžμ—΄μ„ 효율적으둜 μ €μž₯ν•˜κ³  νƒμƒ‰ν•˜κΈ° μœ„ν•œ 트리 ν˜•νƒœμ˜ 자료ꡬ쑰둜 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n)이닀. κΈ°λ³Έ 원리  struct Trie{ Trie* next[26]; bool finish; Trie() :finish(false) { for (int i = 0; i insert(key + 1); } bool find(const char* key) { if (*key == 0) return finish; int curr = *key - 'a'; if (next[curr] != NULL) return next[curr]->find(key + 1); return false; }}; λ¬Έμ œ https://www.acmicpc.net/problem/5670 5670번: νœ΄λŒ€ν° μžνŒνœ΄λŒ€..
[C++] μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ(Union-Find)
Β·
πŸ“ Computer Science/✏ Algorithm
μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ(Union-Find) μ„œλ‘œμ†ŒμΈ 집합듀을 λΆ„ν• ν•˜μ—¬ μ €μž₯ν•œ 집합 Union(): 두 μ§‘ν•©μ˜ 루트 λΆ€λͺ¨λ₯Ό ν•©μΉ¨ Find(): μžμ‹ μ˜ 루트 λΆ€λͺ¨λ₯Ό μ°Ύμ•„ κ³„μ†ν•΄μ„œ 거슬러 μ˜¬λΌκ°€λŠ” κ³Όμ • 문제 https://www.acmicpc.net/problem/1717 1717번: μ§‘ν•©μ˜ ν‘œν˜„ 첫째 쀄에 n(1≤n≤1,000,000), m(1≤m≤100,000)이 주어진닀. m은 μž…λ ₯으둜 μ£Όμ–΄μ§€λŠ” μ—°μ‚°μ˜ κ°œμˆ˜μ΄λ‹€. λ‹€μŒ m개의 μ€„μ—λŠ” 각각의 연산이 주어진닀. 합집합은 0 a b의 ν˜•νƒœλ‘œ μž…λ ₯이 주어진닀. μ΄λŠ” aκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” 집합과, bκ°€ ν¬ν•¨λ˜μ–΄ μžˆλŠ” 집합을 ν•©μΉœλ‹€λŠ” μ˜λ―Έμ΄λ‹€. 두 μ›μ†Œκ°€ 같은 집합에 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€λ₯Ό ν™•μΈν•˜λŠ” 연산은 1 a b의 ν˜•νƒœλ‘œ μž…λ ₯이 주어진닀. μ΄λŠ” a와 bκ°€ 같은 집합에 ν¬ν•¨λ˜μ–΄..
[C++] 투 포인터(Two Pointer)
Β·
πŸ“ Computer Science/✏ Algorithm
투 포인터(Two Pointer) 1차원 λ°°μ—΄μ—μ„œ 각자 λ‹€λ₯Έ μ›μ†Œλ₯Ό 가리킀고 μžˆλŠ” 2개의 포인터λ₯Ό μ‘°μž‘ν•˜μ—¬ μ›ν•˜λŠ” 값을 μ–»λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 문제 https://www.acmicpc.net/problem/2003 2003번: μˆ˜λ“€μ˜ ν•© 2 첫째 쀄에 N(1≤N≤10,000), M(1≤M≤300,000,000)이 주어진닀. λ‹€μŒ μ€„μ—λŠ” A[1], A[2], …, A[N]이 곡백으둜 λΆ„λ¦¬λ˜μ–΄ 주어진닀. 각각의 A[x]λŠ” 30,000을 λ„˜μ§€ μ•ŠλŠ” μžμ—°μˆ˜μ΄λ‹€. www.acmicpc.net #include using namespace std; int arr[10000]; int main() { int N, M; cin >> N >> M; for (int i = 0; i > arr[i]; ..
[C++] next_permutation, prev_permutation
Β·
πŸ“ Computer Science/✏ Algorithm
next_permutation, prev_permutation ν•¨μˆ˜μ— λ²‘ν„°μ˜ iteratorλ‚˜ λ°°μ—΄μ˜ μ£Όμ†Œλ₯Ό λ„£μœΌλ©΄ λ‹€μŒ μˆœμ—΄(next_permutation) λ˜λŠ” 이전 μˆœμ—΄(prev_permutation)의 κ²°κ³Όκ°€ λ²‘ν„°λ‚˜ 배열에 μ μš©λœλ‹€. λ§Œμ•½ λ‹€μŒ λ˜λŠ” 이전 μˆœμ—΄μ΄ μ—†λ‹€λ©΄ Falseλ₯Ό return ν•œλ‹€. 문제 https://www.acmicpc.net/problem/10972 10972번: λ‹€μŒ μˆœμ—΄ 첫째 쀄에 μž…λ ₯으둜 주어진 μˆœμ—΄μ˜ λ‹€μŒμ— μ˜€λŠ” μˆœμ—΄μ„ 좜λ ₯ν•œλ‹€. λ§Œμ•½, μ‚¬μ „μˆœμœΌλ‘œ λ§ˆμ§€λ§‰μ— μ˜€λŠ” μˆœμ—΄μΈ κ²½μš°μ—λŠ” -1을 좜λ ₯ν•œλ‹€. www.acmicpc.net #include #include using namespace std; int num[10000]; int main() { int n; cin >>..
[C++] λΉ„νŠΈ μ—°μ‚°μž
Β·
πŸ“ Computer Science/✏ Algorithm
λΉ„νŠΈ μ—°μ‚°μžμ •μˆ˜ νƒ€μž…μ˜ ν”Όμ—°μ‚°μžμ—λ§Œ 적용될 수 μžˆλ‹€. κΈ°λ³Έ 원리A^BλŠ” 값이 κ°™μœΌλ©΄ 0 λ‹€λ₯΄λ©΄ 1을 λ°˜ν™˜ν•œλ‹€.~AλŠ” -A-1κ³Ό κ°™λ‹€.μ‹œν”„νŠΈ μ—°μ‚°μžμ—μ„œ 빈 λΉ„νŠΈμ—” λͺ¨λ‘ 0이 μ±„μ›Œμ§€μ§€λ§Œ >> μ—°μ‚°μžμ—μ„œ Aκ°€ 음수인 κ²½μš°μ—” 1이 μ±„μ›Œμ§„λ‹€. λ¬Έμ œhttps://tech.kakao.com/2017/09/27/kakao-blind-recruitment-round-1/ μΉ΄μΉ΄μ˜€ μ‹ μž… 곡채 1μ°¨ μ½”λ”© ν…ŒμŠ€νŠΈ 문제 ν•΄μ„€‘λΈ”λΌμΈλ“œ’ μ „ν˜•μœΌλ‘œ μ‹€μ‹œλ˜μ–΄ μ‹œμž‘λΆ€ν„° μ—„μ²­λ‚œ ν™”μ œλ₯Ό λͺ°κ³  온 카카였 개발 μ‹ μž… 곡채. κ·Έ 첫 번째 관문인 1μ°¨ μ½”λ”© ν…ŒμŠ€νŠΈκ°€ μ§€λ‚œ 9μ›” 16일(ν† ) μ˜€ν›„ 2μ‹œλΆ€ν„° 7μ‹œκΉŒμ§€ μž₯μž₯ 5μ‹œκ°„ λ™μ•ˆ 온라인��tech.kakao.com#include using namespace std;int main(){ int n ..
[C++] μ΅œλ‹¨ 경둜(λ‹€μ΅μŠ€νŠΈλΌ, ν”Œλ‘œμ΄λ“œ 와샬, 벨만 ν¬λ“œ)
Β·
πŸ“ Computer Science/✏ Algorithm
μ΅œλ‹¨ 경둜 두 정점 μ‚¬μ΄μ˜ 경둜 쀑 κ°„μ„ μ˜ κ°€μ€‘μΉ˜ 합이 μ΅œμ†ŒμΈ 경둜λ₯Ό μ°ΎλŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 1. λ‹€μ΅μŠ€νŠΈλΌ μ•Œκ³ λ¦¬μ¦˜ κ°€μ€‘μΉ˜κ°€ 적은 μˆœμ„œλŒ€λ‘œ κ·Έ 정점에 μ—°κ²°λœ 정점을 λ°©λ¬Έν•˜λ©΄μ„œ 값을 κ°±μ‹ ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€. 음의 κ°€μ€‘μΉ˜λ₯Ό 가진 κ²½λ‘œλŠ” ꡬ할 수 μ—†λ‹€. κ°€μ€‘μΉ˜ ν•©μ˜ μ΅œλŒ“κ°’μ€ κ°€μ€‘μΉ˜ μ΅œλŒ“κ°’ * (정점 개수 - 1) 이닀. 1) 문제 https://www.acmicpc.net/problem/1753 1753번: μ΅œλ‹¨κ²½λ‘œ 첫째 쀄에 μ •μ μ˜ 개수 V와 κ°„μ„ μ˜ 개수 Eκ°€ 주어진닀. (1≤V≤20,000, 1≤E≤300,000) λͺ¨λ“  μ •μ μ—λŠ” 1λΆ€ν„° VκΉŒμ§€ λ²ˆν˜Έκ°€ 맀겨져 μžˆλ‹€κ³  κ°€μ •ν•œλ‹€. λ‘˜μ§Έ μ€„μ—λŠ” μ‹œμž‘ μ •μ μ˜ 번호 K(1≤K≤V)κ°€ 주어진닀. μ…‹μ§Έ 쀄뢀터 E개의 쀄에 걸쳐 각 간선을 λ‚˜νƒ€λ‚΄λŠ” μ„Έ 개의 μ •μˆ˜ (u, v, ..