πŸ“ Computer Science

    μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern)

    μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern)

    μ˜΅μ €λ²„ νŒ¨ν„΄(Observer Pattern) λ§Œμ•½ μœ μ €μ˜ κ²Œμž„ λ¨Έλ‹ˆκ°€ μ—…λ°μ΄νŠΈλ˜μ–΄ UI, 이벀트 λ“± λ‹€λ₯Έ 였브젝트의 변경이 ν•„μš”ν•˜λ‹€λ©΄ μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  것인가? 맀번 λ‹€λ₯Έ μ˜€λΈŒμ νŠΈκ°€ κ²Œμž„ λ¨Έλ‹ˆ μ—…λ°μ΄νŠΈκ°€ λλŠ”μ§€ 확인할 순 없을 것이닀. 이럴 λ•Œ ν•„μš”ν•œ 것이 μ˜΅μ €λ²„ νŒ¨ν„΄μ΄λ‹€. Sudject(κ²Œμž„ λ¨Έλ‹ˆ)λ‘œλΆ€ν„° μ–΄λ– ν•œ λ³€ν™”κ°€ 생긴닀면, ObserverλŠ” 이 λ³€ν™”λ₯Ό 감지할 수 μžˆλ‹€. 객체의 μƒνƒœ λ³€ν™”λ₯Ό κ΄€μ°°ν•˜λŠ” κ΄€μ°°μž(μ˜΅μ €λ²„)κ°€ μžˆλ‹€. κ΄€μ°°μžλ₯Ό 객체가 κ°–κ³  μžˆλ‹€κ°€ μƒνƒœ λ³€ν™”κ°€ μžˆμ„ λ•Œ λ©”μ„œλ“œ 등을 톡해 객체가 각 μ˜΅μ €λ²„μ—κ²Œ ν†΅μ§€ν•œλ‹€. 주둜 λΆ„μ‚° 이벀트 핸듀링 μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•˜λŠ” 데 μ‚¬μš©λœλ‹€. μ—¬κΈ°μ„œ 핡심은 객체의 μƒνƒœ λ³€ν™”λ₯Ό κ΄€μ°°ν•˜λŠ” 것인데, κ³Όμ—° μ–΄λ–»κ²Œ κ΄€μ°°ν•œλ‹€λŠ” κ²ƒμΌκΉŒ? 1. κ΅¬ν˜„ 1) Observer Concr..

    [C++] μŠ€μœ„ν•‘ μ•Œκ³ λ¦¬μ¦˜(Sweeping Algorithm)

    μŠ€μœ„ν•‘ μ•Œκ³ λ¦¬μ¦˜(Sweeping Algorithm) κ³΅κ°„μ΄λ‚˜ 직선 μƒμ—μ„œ ν•œμͺ½ μ‹œμž‘μ μ„ κΈ°μ€€μœΌλ‘œ λ°˜λŒ€νŽΈ μ’…λ£Œ μ§€μ κΉŒμ§€ μ§€λ‚˜κ°€λŠ”λ°, λ§ˆμ£ΌμΉ˜λŠ” μš”μ†Œλ“€μ— λŒ€ν•΄ νŒλ‹¨μ΄ λ˜λŠ” 기쀀을 μ μš©ν•΄ 정닡을 κ΅¬ν•˜λŠ” 방식이닀. 즉, μ •λ ¬λœ μš”μ†Œλ“€μ„ ν•œ 번만 μˆœνšŒν•˜λ©° μ—°μ‚°ν•˜λ©΄ 정닡이 λ‚˜μ˜€κ²Œ λœλ‹€. 문제 https://www.acmicpc.net/problem/2261 2261번: κ°€μž₯ κ°€κΉŒμš΄ 두 점 첫째 쀄에 μžμ—°μˆ˜ n(2 ≤ n ≤ 100,000)이 주어진닀. λ‹€μŒ n개의 μ€„μ—λŠ” μ°¨λ‘€λ‘œ 각 점의 x, yμ’Œν‘œκ°€ 주어진닀. 각각의 μ’Œν‘œλŠ” μ ˆλŒ“κ°’μ΄ 10,000을 λ„˜μ§€ μ•ŠλŠ” μ •μˆ˜μ΄λ‹€. μ—¬λŸ¬ 점이 같은 μ’Œν‘œλ₯Ό κ°€μ§ˆ μˆ˜λ„ www.acmicpc.net #include #include #include #include #include usi..

    [C++] κ°•ν•œ μ—°κ²° μš”μ†Œ(νƒ€μž”, 코사라주)

    [C++] κ°•ν•œ μ—°κ²° μš”μ†Œ(νƒ€μž”, 코사라주)

    κ°•ν•œ μ—°κ²° μš”μ†Œ(Strongly Connected Component) 두 정점에 λŒ€ν•΄ μ–‘λ°©ν–₯으둜 이동 κ°€λŠ₯ν•œ κ²½λ‘œκ°€ λͺ¨λ‘ μžˆμ„ λ•Œ 두 정점은 같은 κ°• κ²°ν•© μ»΄ν¬λ„ŒνŠΈ(SCC)에 μ†ν•œλ‹€. 즉, κ·Έλž˜ν”„μ˜ μ‚¬μ΄ν΄μ—μ„œ 같은 사이클 내에 μ‘΄μž¬ν•˜λŠ” 정점듀은 같은 SCC에 μ†ν•œλ‹€κ³  ν•  수 μžˆλ‹€. λ°©ν–₯ κ·Έλž˜ν”„μ—μ„œλ§Œ μ •μ˜λœλ‹€. 1. νƒ€μž” μ•Œκ³ λ¦¬μ¦˜ 1) κΈ°λ³Έ 원리 깊이 μš°μ„  탐색 λ°©ν–₯ κ·Έλž˜ν”„μ˜ 정점듀을 λ°©λ¬Έν•œ ν›„ λ°©λ¬Έν•œ μ •μ μ˜ 간선을 톡해 μƒμœ„μ—μ„œ 방문된 정점을 λ°©λ¬Έν•œλ‹€λ©΄ SCCκ°€ μ‘΄μž¬ν•œλ‹€κ³  νŒλ‹¨ν•œλ‹€. 2) 문제 https://www.acmicpc.net/problem/2150 2150번: Strongly Connected Component 첫째 쀄에 두 μ •μˆ˜ V(1 ≤ V ≤ 10,000), E(1 ≤ E ≤ 100,00..

    [C++] μ΅œμ†Œ μ‹ μž₯ 트리(크루슀칼)

    μ΅œμ†Œ μ‹ μž₯ 트리(Minimum Spanning Tree) λͺ¨λ“  정점을 μ—°κ²°ν•˜λŠ” 트리λ₯Ό μ‹ μž₯ 트리라고 ν•˜λŠ”λ° κ°€μ€‘μΉ˜λ₯Ό κ°–λŠ” μ‹ μž₯ 트리 쀑 κ°€μ€‘μΉ˜μ˜ 합이 κ°€μž₯ μž‘μ€ μ‹ μž₯ 트리λ₯Ό μ΅œμ†Œ μ‹ μž₯ 트리라고 ν•œλ‹€. λŒ€ν‘œμ μœΌλ‘œ 크루슀칼 μ•Œκ³ λ¦¬μ¦˜μ΄ 있으며, κ·Έ 외에도 ν”„λ¦Ό μ•Œκ³ λ¦¬μ¦˜κ³Ό 솔린 μ•Œκ³ λ¦¬μ¦˜μ΄ μžˆλ‹€. ν”„λ¦Ό μ•Œκ³ λ¦¬μ¦˜: μž„μ˜μ˜ 정점을 루트 λ…Έλ“œλ‘œ μ‚½μž…ν•œ ν›„ μΈμ ‘ν•œ μ •μ μ˜ κ°„μ„  쀑 κ°€μž₯ μž‘μ€ 정점을 νŠΈλ¦¬μ— μ‚½μž…ν•˜λ©° μ΅œμ†Œ μ‹ μž₯ 트리λ₯Ό λ§Œλ“ λ‹€. 솔린 μ•Œκ³ λ¦¬μ¦˜ 1. 크루슀칼 μ•Œκ³ λ¦¬μ¦˜(Kruskal's algorithm) 1) κΈ°λ³Έ 원리 λͺ¨λ“  κ°„μ„ μ˜ κ°€μ€‘μΉ˜λ₯Ό μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œ ν›„ κ·Έ λͺ©λ‘μ„ μ°¨λ‘€λŒ€λ‘œ μˆœνšŒν•˜λ©° 사이클이 생기지 μ•Šλ„λ‘ μ΅œμ†Œ μ‹ μž₯ νŠΈλ¦¬μ— μ‚½μž…ν•˜λ©° μ΅œμ†Œ μ‹ μž₯ 트리λ₯Ό λ§Œλ“ λ‹€. 2) 문제 www.acmicpc.net/pr..

    [C++] μ„Έκ·Έλ¨ΌνŠΈ 트리(Segment Tree)

    [C++] μ„Έκ·Έλ¨ΌνŠΈ 트리(Segment Tree)

    μ„Έκ·Έλ¨ΌνŠΈ 트리(Segment Tree) λ°°μ—΄ λ‚΄ λ²”μœ„ 값을 κ΅¬ν•˜κ±°λ‚˜ νŠΉμ • λ²”μœ„μ˜ 값듀을 λ³€κ²½ν•  λ•Œ λΉ λ₯΄κ²Œ μ ‘κ·Όν•˜κΈ° μœ„ν•΄ μ‚¬μš©ν•œλ‹€. 이름 κ·ΈλŒ€λ‘œ ꡬ간듀을 λ³΄μ‘΄ν•˜κ³  μžˆλŠ” νŠΈλ¦¬μ΄λ‹€. 리프 λ…Έλ“œλŠ” λ°°μ—΄μ˜ κ·Έ 수 자체λ₯Ό μ˜λ―Έν•˜κ³  리프 λ…Έλ“œ μ™Έ λ…Έλ“œλ“€μ€ μžμ‹ λ…Έλ“œλ₯Ό λŒ€ν‘œν•˜λŠ” 값이닀. 리프 λ…Έλ“œλ₯Ό μ œμ™Έν•œ λ…Έλ“œλŠ” λΉ„μ›Œμ ΈμžˆλŠ”λ°, μ„Έκ·Έλ¨ΌνŠΈ 트리의 λͺ©μ μ— 따라 μ±„μ›Œμ•Όν•œλ‹€. κΈ°λ³Έ 원리 : ν•© https://www.acmicpc.net/blog/view/9 μ„Έκ·Έλ¨ΌνŠΈ 트리 (Segment Tree) 문제 λ°°μ—΄ Aκ°€ 있고, μ—¬κΈ°μ„œ λ‹€μŒκ³Ό 같은 두 연산을 μˆ˜ν–‰ν•΄μ•Όν•˜λŠ” 문제λ₯Ό μƒκ°ν•΄λ΄…μ‹œλ‹€. ꡬ간 l, r (l ≤ r)이 μ£Όμ–΄μ‘Œμ„ λ•Œ, A[l] + A[l+1] + ... + A[r-1] + A[r]을 κ΅¬ν•΄μ„œ 좜λ ₯ν•˜κΈ° i번째 수λ₯Ό v둜 ..

    λ©€ν‹° ν”„λ‘œμ„Έμ‹±, λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°, λ©€ν‹° νƒœμŠ€ν‚Ή

    λ©€ν‹° ν”„λ‘œμ„Έμ‹±, λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°, λ©€ν‹° νƒœμŠ€ν‚Ή

    CPU μ½”μ–΄μ˜ κ΄€μ μ—μ„œ μƒκ°ν•˜μ—¬ λΆ„λ₯˜ν•œλ‹€. 1. λ©€ν‹° ν”„λ‘œμ„Έμ‹±(Multi-processing) CPU μ½”μ–΄ μ—¬λŸ¬ 개둜 μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것 λ©€ν‹° μ“°λ ˆλ”©(Multi-threading): ν•˜λ‚˜μ˜ ν”„λ‘œμ„ΈμŠ€ 내에 μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œκ°€ μ‘΄μž¬ν•˜μ—¬ λ³‘λ ¬μ μœΌλ‘œ μ²˜λ¦¬ν•˜λŠ” 것 2. λ©€ν‹° ν”„λ‘œκ·Έλž˜λ°(Multi-programming) CPU μ½”μ–΄ ν•˜λ‚˜λ‘œ μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€λ₯Ό μˆ˜ν–‰ν•˜λŠ” κ²ƒμœΌλ‘œ ν”„λ‘œμ„Έμ„œ μžμ›μ΄ λ‚­λΉ„λ˜λŠ” 것을 μ΅œμ†Œν™”ν•˜κΈ° μœ„ν•¨μ΄λ‹€. 3. λ©€ν‹° νƒœμŠ€ν‚Ή(Multi-tasking) λ‹€μˆ˜μ˜ Taskλ₯Ό 운영체제 μŠ€μΌ€μ€„λ§μ— μ˜ν•΄ λ²ˆκ°ˆμ•„ κ°€λ©΄μ„œ μˆ˜ν–‰ν•˜λŠ” κ²ƒμœΌλ‘œ μ΄λ•Œ TaskλŠ” ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ ν™•μž₯된 κ°œλ…μ΄λ‹€. ν”„λ‘œμ„Έμ„œκ°€ 각각의 Taskλ₯Ό 자주 λ²ˆκ°ˆμ•„κ°€λ©΄μ„œ μ²˜λ¦¬ν•˜λŠ”λ° μ‚¬μš©μžμ—κ²ŒλŠ” 마치 λ™μ‹œμ— μ—¬λŸ¬ Taskκ°€ μˆ˜ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ..