πŸ“ Computer Science

    κ΅μ°©μƒνƒœ(Deadlock)

    κ΅μ°©μƒνƒœ(Deadlock) λ‘˜ μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ 곡유 μžμ›μ„ λ¬΄ν•œμ • 기닀리고 있고 곡유 μžμ›μ„ μ‚¬μš© 쀑인 ν”„λ‘œμ„ΈμŠ€λŠ” μ§„μž… λŒ€κΈ° 쀑인 ν”„λ‘œμ„ΈμŠ€κ°€ μ§„ν–‰λΌμ•Όλ§Œ λΉ μ Έλ‚˜μ˜¬ 수 μžˆλŠ” 상황 1. 4가지 쑰건 μƒν˜Έ 배제(Mutual Exclusion): ν•œ λ²ˆμ— ν•œ ν”„λ‘œμ„ΈμŠ€λ§Œ μžμ› μ‚¬μš© μ μœ μ™€ λŒ€κΈ°(Hold & Wait): 곡유 μžμ›μ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ κ°–κ³  μžˆλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ λ‹€λ₯Έ μžμ›μ— λŒ€ν•œ μ ‘κ·Ό κΆŒν•œμ„ μš”κ΅¬ 비선점(Non-preemptive): λ‹€λ₯Έ ν”„λ‘œμ„ΈμŠ€κ°€ μžμ› μ ‘κ·Ό κΆŒν•œμ„ κ°•μ œλ‘œ 빼앗을 수 μ—†λ‹€. ν™˜ν˜• λŒ€κΈ°(Circular Wait): 두 개 μ΄μƒμ˜ ν”„λ‘œμ„ΈμŠ€κ°€ μžμ› 접근을 κΈ°λ‹€λ¦¬λŠ”λ° κ·Έ 관계에 사이클 쑴재 2. 해결법 예방 기법: 4가지 쑰건 λΆ€μ • νšŒν”Ό 기법: ꡐ착 μƒνƒœ λ°œμƒ μ‹œ ν”Όν•΄λ‚˜κ°€λŠ” 방법 은행원 μ•Œκ³ λ¦¬μ¦˜..

    [Git] Git Flow

    [Git] Git Flow

    Git Git은 μ„œλ²„λ₯Ό λΆ„μ‚°μ‹œμΌœ ꡬ좕할 수 있게 ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ‘œ 지역 μ €μž₯μ†Œλ₯Ό λ§Œλ“€κ³  파일, μ½”λ“œ 등을 κ΄€λ¦¬ν•˜λŠ” μž‘μ—…μ„ ν•œλ‹€. GitHubλŠ” Git으둜 κ΄€λ¦¬ν•˜λŠ” 자료λ₯Ό λ‹€λ₯Έ μ‚¬λžŒκ³Ό κ³΅μœ ν•˜κ±°λ‚˜ λ°±μ—…ν•  수 μžˆλŠ” μ›Ή μ‚¬μ΄νŠΈμ΄λ‹€. Git Flow κΈ°λ³Έ λΈŒλžœμΉ˜λŠ” 5가지λ₯Ό μ΄μ•ΌκΈ°ν•œλ‹€. feature > develop > release > hotfix > master λΈŒλžœμΉ˜κ°€ μ‘΄μž¬ν•˜λ©° 머지 μˆœμ„œλŠ” μ•žμ—μ„œ λ’€λ‘œ μ§„ν–‰λœλ‹€. release λΈŒλžœμΉ˜μ™€ hotfix 브랜치의 경우, develop 브랜치의 였λ₯Έμͺ½μ— μ‘΄μž¬ν•˜κΈ°μ— λͺ¨λ‘ develop λΈŒλžœμΉ˜λ„ 머지λ₯Ό ν•˜λ„λ‘ ꡬ성이 λ˜μ–΄μžˆλ‹€. 1) Master Branch μ œν’ˆμœΌλ‘œ μΆœμ‹œλ  수 μžˆλŠ” 브랜치둜 배포(Release) 이λ ₯을 κ΄€λ¦¬ν•˜κΈ° μœ„ν•΄ μ‚¬μš©. 즉, 배포 κ°€λŠ₯ν•œ μƒνƒœλ§Œμ„ κ΄€..

    [C++] 트라이(Trie)

    [C++] 트라이(Trie)

    트라이(Trie) μ—¬λŸ¬ λ¬Έμžμ—΄μ„ 효율적으둜 μ €μž₯ν•˜κ³  νƒμƒ‰ν•˜κΈ° μœ„ν•œ 트리 ν˜•νƒœμ˜ 자료ꡬ쑰둜 μ‹œκ°„ λ³΅μž‘λ„λŠ” O(n)이닀. κΈ°λ³Έ 원리 struct Trie { Trie* next[26]; bool finish; Trie() :finish(false) { for (int i = 0; i < 26; ++i) next[i] = NULL; } ~Trie() { for (int i = 0; i < 26; i++) if (next[i]) delete next[i]; } void insert(const char* key) { if (*key == 0) { finish = true; return; } int curr = *key - 'a'; if (next[curr] == NULL) next[curr] = new Trie(..

    TDD(Test Driven Development)

    TDD(Test Driven Development)

    TDD(Test Driven Development) ν…ŒμŠ€νŠΈκ°€ κ°œλ°œμ„ μ΄λŒμ–΄ λ‚˜κ°„λ‹€. 반볡적인 ν…ŒμŠ€νŠΈμ™€ μˆ˜μ •μ„ 톡해 κ³ ν’ˆμ§ˆμ˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό νƒ„μƒμ‹œν‚¬ 수 μžˆλ‹€. κ°œλ°œμžλŠ” μš”κ΅¬λ˜λŠ” μƒˆλ‘œμš΄ κΈ°λŠ₯에 λŒ€ν•œ μžλ™ν™”λœ ν…ŒμŠ€νŠΈ μΌ€μ΄μŠ€λ₯Ό μž‘μ„±ν•˜κ³  ν•΄λ‹Ή ν…ŒμŠ€νŠΈλ₯Ό ν†΅κ³Όν•˜λŠ” κ°€μž₯ κ°„λ‹¨ν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•œλ‹€. 일단 ν…ŒμŠ€νŠΈ ν†΅κ³Όν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜κ³  상황에 맞게 λ¦¬νŒ©ν† λ§ν•˜λŠ” 과정을 κ±°μΉœλ‹€. μž₯점 μž‘μ—…κ³Ό λ™μ‹œμ— ν…ŒμŠ€νŠΈλ₯Ό μ§„ν–‰ν•˜λ©΄μ„œ μ‹€μ‹œκ°„μœΌλ‘œ 였λ₯˜ νŒŒμ•…μ΄ κ°€λŠ₯ν•˜λ‹€. 짧은 개발 μ£ΌκΈ°λ₯Ό 톡해 고객의 μš”κ΅¬μ‚¬ν•­ λΉ λ₯΄κ²Œ 수용, ν”Όλ“œλ°±μ΄ κ°€λŠ₯ν•˜κ³  진행 상황 νŒŒμ•…μ΄ 쉽닀. μžλ™ν™” 도ꡬλ₯Ό μ΄μš©ν•œ TDD ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€λ₯Ό λ‹¨μœ„ ν…ŒμŠ€νŠΈλ‘œ μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 단점 κΈ°μ‘΄ 개발 ν”„λ‘œμ„ΈμŠ€μ— ν…ŒμŠ€νŠΈμΌ€μ΄μŠ€ 섀계가 μΆ”κ°€λ˜λ―€λ‘œ 생산 λΉ„μš©μ΄ μ¦κ°€ν•œλ‹€. ν…ŒμŠ€νŠΈμ˜ λ°©ν–₯μ„±, ν”„λ‘œμ νŠΈ ..

    λ™μ‹œμ„±(Concurrency)κ³Ό 병렬성(Parallelism)

    λ™μ‹œμ„±(Concurrency)κ³Ό 병렬성(Parallelism)

    λ™μ‹œμ„±(Concurrency)κ³Ό 병렬성(Parallelism) 1. λ™μ‹œμ„±(Concurrency) μ‹±κΈ€ μ½”μ–΄μ—μ„œ λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό λ™μž‘μ‹œν‚€κΈ° μœ„ν•œ 방식 λ©€ν‹° νƒœμŠ€ν‚Ήμ„ μœ„ν•΄ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μ‹€ν–‰λ˜λŠ” μ„±μ§ˆμ„ λ§ν•œλ‹€. 각 μŠ€λ ˆλ“œλ“€μ΄ λ³‘λ ¬μ μœΌλ‘œ μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ 사싀은 λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μ‘°κΈˆμ”© μ‹€ν–‰λ˜κ³  μžˆλŠ” 것이닀. 즉 λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” 것이닀. λ…λ¦½μ μœΌλ‘œ μ‹€ν–‰ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ“€μ„ κ΅¬μ„±ν•œλ‹€. 1λͺ…이 5개의 μž‘μ—…μ„ λΉ λ₯Έ μ‹œκ°„μ— 이것저것 μ‹€ν–‰ν•œλ‹€. λ¬Έλ§₯ κ΅ν™˜μ΄ λ°œμƒν•œλ‹€. 2. 병렬성(Parallelism) λ©€ν‹° μ½”μ–΄μ—μ„œ λ©€ν‹° μŠ€λ ˆλ“œλ₯Ό λ™μž‘μ‹œν‚€λŠ” 방식 ν•œ 개 μ΄μƒμ˜ μŠ€λ ˆλ“œλ₯Ό ν¬ν•¨ν•˜λŠ” 각 코어듀이 λ™μ‹œμ— μ‹€ν–‰λ˜λŠ” μ„±μ§ˆμ„ λ§ν•œλ‹€. λ©€ν‹° μ½”μ–΄μ—μ„œλ„ λ™μ‹œμ„± μ‚¬μš©μ΄ κ°€λŠ₯ν•˜λ‹€. 5λͺ…이 5개의 μž‘μ—…μ„ λ™μ‹œ..

    [C++] μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ(Union-Find)

    [C++] μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ(Union-Find)

    μœ λ‹ˆμ˜¨ νŒŒμΈλ“œ(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κ°€ 같은 집합에 ν¬ν•¨λ˜μ–΄..