Skip to content

Latest commit

ย 

History

History
444 lines (297 loc) ยท 12.7 KB

File metadata and controls

444 lines (297 loc) ยท 12.7 KB

Directory

โ”œโ”€โ”€ JAVA
โ”‚   โ””โ”€โ”€ src
โ”‚       โ”œโ”€โ”€ baekjoon      : ๋ฐฑ์ค€ ๋‹จ๊ณ„๋ณ„ ๋ฌธ์ œ ํ’€์ด
โ”‚       โ”œโ”€โ”€ solvedClass   : solved.ac class๋ณ„ ๋ฌธ์ œ ํ’€์ด
โ”‚       โ””โ”€โ”€ AlgorithmType : ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•๋ณ„ ํ’€์ด
โ””โ”€โ”€ Python
    โ””โ”€โ”€ src
        โ””โ”€โ”€ AlgorithmType : ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์œ ํ˜•๋ณ„ ํ’€์ด

Algorithm

ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜ - ์‹œ๊ฐ„์ด ์งง๊ณ , ์ž์›์„ ์ ๊ฒŒ ์‚ฌ์šฉ

1. ์‹œ๊ฐ„ ๋ณต์žก๋„ (1์ดˆ์— ์•ฝ 3์–ต ~ 5์–ต)

์—ฐ์‚ฐ์„ ์ˆซ์ž๋กœ ํ‘œ๊ธฐ

์‹œ๊ฐ„ ๋ณต์žก๋„๋ฅผ ๋” ์ค‘์š”ํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋ณ„๋‹ค๋ฅธ ๋ง์ด ์—†์œผ๋ฉด ์‹œ๊ฐ„๋ณต์žก๋„๋ฅผ ๋œปํ•จ

Big - O๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์ˆ˜ํ•™์ ์œผ๋กœ ํ‘œ๊ธฐํ•ด์ฃผ๋Š” ํ‘œ๊ธฐ๋ฒ•

(์‹ค์ œ ๋Ÿฌ๋‹ํƒ€์ž„์„ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค ๋ฐ์ดํ„ฐ๋‚˜ ์‚ฌ์šฉ์ž์˜ ์ฆ๊ฐ€์œจ์— ๋”ฐ๋ฅธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์„ฑ๋Šฅ์„ ์˜ˆ์ธกํ•˜๋Š” ๊ฒŒ ๋ชฉํ‘œ์ด๋‹ค.)
-> ์ƒ์ˆ˜์™€ ๊ฐ™์€ ์ˆซ์ž๋“ค์€ ๋ชจ๋‘ 1์ด ๋œ๋‹ค.

O(1) / ๋ฐฐ์—ด์˜ ์š”์†Œ ์ฐธ์กฐ

์ž…๋ ฅ ๋ฐ์ดํ„ฐ ํƒ€์ž…์˜ ํฌ๊ธฐ์— ์ƒ๊ด€ ์—†์ด ์–ธ์ œ๋‚˜ ์ผ์ •ํ•œ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋งํ•œ๋‹ค.

  • ๋ฐ์ดํ„ฐ๊ฐ€ ์ฆ๊ฐ€ํ•จ์— ๋”ฐ๋ผ ์„ฑ๋Šฅ ๋ณ€ํ™”๊ฐ€ ์—†๋‹ค.

O(N) / ์ˆœ์ฐจํƒ์ƒ‰

์ž…๋ ฅ ๋ฐ์ดํ„ฐ์˜ ํฌ๊ธฐ์— ๋น„๋ก€ํ•ด์„œ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉ

  • N์˜ ํฌ๊ธฐ๋งŒํผ ์ฒ˜๋ฆฌ ์‹œ๊ฐ„์ด ๋Š˜๊ฒŒ๋œ๋‹ค.

O(Nn) /bubble sort

n์„ ๋Œ๋ฆฌ๋ฉด์„œ, n์œผ๋กœ ๋˜ ๋Œ๋ฆด ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

O(NM)

m์„ n๋งŒํผ ๋Œ๋ฆฐ๋‹ค.

O(2n)

ex) ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด

  • ์žฌ๊ท€์ ์œผ๋กœ ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค, ๋ฐ”๋กœ ์ „์˜ ์ˆซ์ž์™€ ์ „์ „์ˆซ์ž๋ฅผ ์•Œ์•„์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค ๋ฒˆ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๋งˆ๋‹ค, 2๋ฒˆ์”ฉ ํ˜ธ์ถœํ•œ๋‹ค. -> 2์ง„ํŠธ๋ฆฌ์˜ ํ˜•ํƒœ -> ํŠธ๋ฆฌ์˜ ๋†’์ด๋งŒํผ ๋ฐ˜๋ณตํ•œ๋‹ค.

O(logN) / 2์ง„ ๊ฒ€์ƒ‰

์ฒ˜๋ฆฌ๋ฅผ ํ•  ๋•Œ๋งˆ๋‹ค, ์ฒ˜๋ฆฌ ํ•ด์•ผ ํ•  ๋ฐ์ดํ„ฐ ์–‘์ด ๋ฐ˜์”ฉ ์ค„์–ด๋“œ๋Š” ๊ฒฝ์šฐ

O(sqrt(N)) / ์†Œ์ˆ˜ ํƒ์ƒ‰

Tip!!

๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด 1์ดˆ์ธ ๊ฒฝ์šฐ

  • N์˜ ๋ฒ”์œ„ 500์ธ ๊ฒฝ์šฐ : O(n3)
  • N์˜ ๋ฒ”์œ„ 2,000์ธ ๊ฒฝ์šฐ : O(n2)
  • N์˜ ๋ฒ”์œ„ 100,000์ธ ๊ฒฝ์šฐ : O(NlogN)
  • N์˜ ๋ฒ”์œ„ 10,000,000์ธ ๊ฒฝ์šฐ : O(N)

2. ๊ณต๊ฐ„ ๋ณต์žก๋„ (512MB = ์•ฝ 1.2๊ฐœ Int)

  • ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚จ ํ›„ ์™„๋ฃŒํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ์ž์›์˜ ๊ณต๊ฐ„

์ž…๋ ฅ์ด n์ผ ๋•Œ ์—ฐ์‚ฐ ํšŸ์ˆ˜ -> ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์†๋„

  • ์—ฐ์‚ฐ์ด ์ปค์ง€๋ฉด ๊ณ„์ˆ˜๋Š” ์˜๋ฏธ์—†์–ด์ง€๊ณ , ์ฐจ์ˆ˜๊ฐ€ ์ค‘์š”ํ•˜๋‹ค! (ํฐ ์ƒ์ˆ˜๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ ์กฐ์‹ฌ)

Tip!!

int a[1000] : 4KB
int a[1000000] : 4MB
int a[2000][2000] : 16MB

  • ๋ฐ์ดํ„ฐ์˜ ๊ฐœ์ˆ˜๊ฐ€ 1000๋งŒ ๋‹จ์œ„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก
  • python 100๋งŒ ์ด์ƒ ๋ฆฌ์ŠคํŠธ ์„ ์–ธํ•˜๋Š” ๊ฒฝ์šฐ ์ ์Œ

์ˆ˜ํ–‰ ์‹œ๊ฐ„ ์ธก์ • ์†Œ์Šค์ฝ”๋“œ

Python

import time
start_time = time.time() # ์ธก์ • ์‹œ์ž‘

# ์†Œ์Šค

end_time = time.time() # ์ธก์ • ์ข…๋ฃŒ
print("time : ", end_time - start_time) # ์ถœ๋ ฅ

JAVA

์ž๋ฃŒ๊ตฌ์กฐ

์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ

  • ex) ๋ฐฐ์—ด, ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ

๋น„์„ ํ˜• ์ž๋ฃŒ๊ตฌ์กฐ

  • ex) ํŠธ๋ฆฌ, ๊ทธ๋ž˜ํ”„, ํ•ด์‹œ

๋ฐฐ์—ด

  • ๊ฐ’ ํ™•์ธ ๋ณ€๊ฒฝ : O(1)
  • ์ž„์˜์˜ ์œ„์น˜ ๊ฐ’ ์ถ”๊ฐ€/์‚ญ์ œ : O(n) / ๋งˆ์ง€๋ง‰ ์œ„์น˜ : O(1)
๋ฐฐ์—ด ์—ฐ๊ฒฐ๋ฆฌ์ŠคํŠธ
k๋ฒˆ์งธ ์›์†Œ์˜ ์ ‘๊ทผ O(1) O(k)
์ž„์˜ ์œ„์น˜ ์›์†Œ ์ถ”๊ฐ€ / ์ œ๊ฑฐ O(N) O(1)
๋ฉ”๋ชจ๋ฆฌ ์ƒ์˜ ๋ฐฐ์น˜ ์—ฐ์† ๋ถˆ์—ฐ์†
์ถ”๊ฐ€๋กœ ํ•„์š”ํ•œ ๊ณต๊ฐ„ - O(N)

1. ํ•ด์‹œ

JAVA : HashMap<Integer,String> map = new HashMap<>(10)

ํŠน์ง•

  • 'ํ‚ค'์™€ '๊ฐ’'์„ ์ €์žฅํ•˜๋Š” ์ž๋ฃŒ ๊ตฌ์กฐ
  • ํ•ด์‹œ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด 'ํ‚ค'์™€ '๊ฐ’'์ด ์ €์žฅ๋˜๋Š” ์œ„์น˜๋ฅผ ๊ฒฐ์ •ํ•˜๋ฏ€๋กœ, ์‚ฌ์šฉ์ž๋Š” ๊ทธ ์œ„์น˜๋ฅผ ์•Œ ์ˆ˜ ์—†๊ณ , ์‚ฝ์ž…๋˜๋Š” ์ˆœ์„œ์™€ ๋“ค์–ด ์žˆ๋Š” ์œ„์น˜ ๋˜ํ•œ ๊ด€๊ณ„๊ฐ€ ์—†๋‹ค.
  • ๊ฒ€์ƒ‰ ๊ณผ ์ €์žฅ์˜ ํ‰๊ท ์ ์ธ ์‹œ๊ฐ„ ๋ณต์žก๋„๊ฐ€ O(1)์— ์ˆ˜๋ ดํ•˜๊ฒŒ ๋œ๋‹ค.
  • ๊ฐ’์ด ์ถ”๊ฐ€๋กœ ๋“ค์–ด์˜ค๋ฉด List์ฒ˜๋Ÿผ ์ €์žฅ๊ณต๊ฐ„์„ ํ•œ ์นธ์”ฉ ๋Š˜๋ฆฌ์ง€ ์•Š๊ณ  ์•ฝ ๋‘๋ฐฐ๋กœ ๋Š˜๋ฆฐ๋‹ค.
    -> ์ด ๊ณผ์ •์ด ๊ณผ๋ถ€ํ•˜๊ฐ€ ๋งŽ์ด ๊ฑธ๋ฆฌ๊ธฐ ๋•Œ๋ฌธ์— ์ดˆ๊ธฐ์— ์ €์žฅํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์ฃผ์š” ๋ฉ”์†Œ๋“œ

  • put() : HashMap์— ํ‚ค์™€ ๊ฐ’์„ ์ €์žฅ
  • get() : ์ง€์ •๋œ ํ‚ค๊ฐ’์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • remove() : HashMap์—์„œ ์ง€์ •๋œ ํ‚ค๋กœ ์ง€์ •๋œ ๊ฐ’์„ ์ œ๊ฑฐํ•œ๋‹ค
  • clear() : HashMap์˜ ๋ชจ๋“  ๊ฐ์ฒด๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.
  • containsKey() : HashMap์— ์ง€์ •๋œ ํ‚ค๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ๋Š”์ง€ ์•Œ๋ฆผ
  • isEmpty() : HashMap์ด ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
  • size() : HashMap์—์ €์žฅ๋œ ์š”์†Œ์˜ ๊ฐœ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • keySet() : HashMap์— ์ €์žฅ๋œ ๋ชจ๋“  ํ‚ค๊ฐ€ ์žˆ๋Š” Set์„ ๋ฐ˜ํ™˜ํ•œ๋‹ค.
  • ์ฐธ๊ณ  https://vaert.tistory.com/107

2. ์Šคํƒ/ํ

Stack

JAVA : Stack stack = new Stack<>();

ํŠน์ง•

  • ์›์†Œ ์ถ”๊ฐ€ O(1)
  • ์›์†Œ ์ œ๊ฑฐ O(1)
  • ์›์†Œ ํ™•์ธ(TOP) O(1)
  • FILO
  • Top

์ฃผ์š” ๋ฉ”์†Œ๋“œ

  • pop() : ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
  • push() : ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€
  • peek() : ๊ฐ€์žฅ ๋‚˜์ค‘์— ๋„ฃ์€ ๋ฐ์ดํ„ฐ ํ™•์ธ
  • isEmpty() : ๋น„์–ด์žˆ๋Š”์ง€ ํ™•์ธ
  • size() : ์Šคํƒ์— ์žˆ๋Š” ์š”์†Œ ํฌ๊ธฐ ๋ฐ˜ํ™˜

Queue

JAVA : Queue queue = new LinkedList<>();

ํŠน์ง•

  • ์›์†Œ ์ถ”๊ฐ€/์ œ๊ฑฐ : O(1)
  • ์ œ์ผ ์•ž/๋’ค ์›์†Œ ํ™•์ธ : O(1)
  • FIFO
  • head, tail

์ฃผ์š” ๋ฉ”์†Œ๋“œ

  • add() : ๋งจ ๋’ค์— ๊ฐ’ ์‚ฝ์ž… (๋ฐ˜ํ™˜)
  • poll() : ๋งจ ์•ž ๊ฐ’ ์ œ๊ฑฐ (๋ฐ˜ํ™˜)
  • offer() : ๋งจ ๋’ค์— ๊ฐ’ ์‚ฝ์ž…
  • remove() : ๋งจ ์•ž ๊ฐ’ ์ œ๊ฑฐ
  • peek() : ๋งจ ์•ž ์š”์†Œ ๋ฐ˜ํ™˜ // ์˜ค๋ฆฌํ”ฝ

Deque

JAVA : Deque deque = new LinkedList<>();

ํŠน์ง•

  • ์›์†Œ ์ถ”๊ฐ€/์ œ๊ฑฐ : O(1)
  • ์ œ์ผ ์•ž/๋’ค ์›์†Œ ํ™•์ธ : O(1)

3. ํŠธ๋ฆฌ

Tree

  • ์ด์ง„ํŠธ๋ฆฌ : ๊ฐ ๋…ธ๋“œ๊ฐ€ ์ž์‹์„ ์ตœ๋Œ€ 2๋ช…์„ ๊ฐ€์ง€๋Š” ํŠธ๋ฆฌ
    -> ์ „์œ„์ˆœํšŒ, ์ค‘์œ„์ˆœํšŒ, ํ›„์œ„์ˆœํšŒ
  • ์ด์ง„๊ฒ€์ƒ‰ํŠธ๋ฆฌ : ์™ผ์ชฝ ์„œ๋ธŒํŠธ๋ฆฌ์—๋Š” ํ•ด๋‹น๋…ธ๋“œ๋ณด๋‹ค ์ž‘์€ ๊ฐ’ / ์˜ค๋ฅธ์ชฝ ์„œ๋ธŒ ํŠธ๋ฆฌ์—๋Š” ํ•ด๋‹น ๋…ธ๋“œ๋ณด๋‹ค ํฐ ๊ฐ’
    -> ์ค‘์œ„์ˆœํšŒ ๋ฐฉ์‹์„ ์“ด๋‹ค.(์ •๋ ฌ ์ˆœ์„œ๋Œ€๋กœ ์ฝ์„ ์ˆ˜ ์žˆ์Œ.)
  • Trie(ํŠธ๋ผ์ด) ํŠธ๋ฆฌ : ๋ฌธ์ž์—ด์„ ์ €์žฅํ•˜๊ณ  ํšจ์œจ์ ์œผ๋กœ ํƒ์ƒ‰ํ•˜๊ธฐ ์œ„ํ•œ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ

Heap

  • ์ตœ๋Œ€๊ฐ’์ด๋‚˜ ์ตœ์†Œ๊ฐ’์„ ๋น ๋ฅด๊ฒŒ ์ฐพ๊ธฐ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ ์ž๋ฃŒ๊ตฌ์กฐ
MinHeap : ๊ฐ€์žฅ ์ž‘์€๊ฐ’์ด root๋…ธ๋“œ
MaxHeap : ๊ฐ€์žฅ ํฐ ๊ฐ’์ด root๋…ธ๋“œ
  • ๋…ธ๋“œ ์ถ”๊ฐ€ ์‹œ, ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰์— ์ถ”๊ฐ€ํ•˜๊ณ  ์œ„์˜ ๋…ธ๋“œ์™€ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ •๋ ฌ
  • ๋…ธ๋“œ ์‚ญ์ œ ์‹œ, root๋…ธ๋“œ์˜ ๊ฐ’์„ ๋นผ๊ณ  ์ •๋ ฌํ•˜๋Š” ๋ฐฉ์‹

Tip!!

JAVA PriorityQueue ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ minHeap์ด๋‹ค.

// ์ตœ์†Œ ํž™
PriorityQueue<Integer> minHeap = new PriorityQueue<Integer>();

// ์ตœ๋Œ€ ํž™
PriorityQueue<Integer> maxHeap = new PriorityQueue<Integer>(Comparator.reverseOrder());

// ์ตœ๋Œ€ ํž™ version2
PriorityQueue<Integer> maxHeap = PriorityQueue<>(new Comparator<Integer>(){
	@Override
	public int compare(Integer i1, Integer i2) {
		return i2-i1;
	}
});

Graph

๋ถ„๋ฅ˜

  • ์ •์ (vertex) / ๊ฐ„์„ (edge)
  • ๋ฐฉํ–ฅ ์œ ๋ฌด์— ๋”ฐ๋ผ Directed / Undirected graph๋กœ ๋‚˜๋‰œ๋‹ค.
  • ์จํด ์œ ๋ฌด์— ๋”ฐ๋ผ Cyclic / Acyclic graph๋กœ ๋‚˜๋‰œ๋‹ค.

ํ‘œํ˜„๋ฐฉ๋ฒ•

  • 1์ฐจ์› ๋ฆฌ์ŠคํŠธ
    • ์žฅ์ 
      • ๊ฐ„์„  ๊ฐœ์ˆ˜์— ๋น„๋ก€ํ•˜๋Š” ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ
      • ํŠน์ • ๋…ธ๋“œ์—์„œ ๋ชจ๋“  ๋…ธ๋“œ ์—ฐ๊ฒฐ ํ™•์ธ O(E)
    • ๋‹จ์ 
      • ํŠน์ • ๋…ธ๋“œ์—์„œ ๋…ธ๋“œ ์—ฐ๊ฒฐ ํ™•์ธ O(V)
  • 2์ฐจ์› ๋ฐฐ์—ด
    • ์žฅ์ 
      • ๊ตฌํ˜„ ์‰ฌ์›€
      • ํŠน์ • ๋…ธ๋“œ์—์„œ ๋…ธ๋“œ ์—ฐ๊ฒฐ ํ™•์ธ O(1)
    • ๋‹จ์ 
      • ํŠน์ • ๋…ธ๋“œ์—์„œ ๋ชจ๋“  ๋…ธ๋“œ ์—ฐ๊ฒฐ ํ™•์ธ O(V)
      • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ ํผ

๊ฒ€์ƒ‰๋ฐฉ๋ฒ•

  • Depth First Search(DFS) : ๊นŠ์ด์šฐ์„ ๊ฒ€์ƒ‰ -> Stack ์ด์šฉ
  • Breadth First Search(BFS) : ๋„ˆ๋น„์šฐ์„ ๊ฒ€์ƒ‰ -> Queue ์ด์šฉ

์•Œ๊ณ ๋ฆฌ์ฆ˜

1. ์ •๋ ฌ

Arrays/Collections class ์‚ฌ์šฉํ•œ ์ •๋ ฌ

  • Arrays.sort(arr) / Collections.sort(arr) : ๋ฐฐ์—ด ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
  • Arrays.sort(arr, Collections.reverseOrder()); : ๋ฐฐ์—ด ๋‚ด๋ฆผ์ฐจ์ˆœ ์ •๋ ฌ

Collections vs ArraySort ์‹œ๊ฐ„ ๋ณต์žก๋„ ๋น„๊ต

  • ArraysSort : dual-pivot QuickSort ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์‚ฌ์šฉ

1) ์‚ฝ์ž…(Insert) ์ •๋ ฌ

2) ์„ ํƒ(Selection) ์ •๋ ฌ

3) ๋ฒ„๋ธ”(Bubble) ์ •๋ ฌ

4) ์…ธ(Shell) ์ •๋ ฌ

5) ํ€ต(Quick) ์ •๋ ฌ

6) ๋ณ‘ํ•ฉ(Merge) ์ •๋ ฌ

  • ๋ถ„ํ•  ์ •๋ณต ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ๋Œ€ํ‘œ์ ์ธ ์˜ˆ

7) ํž™(Heap) ์ •๋ ฌ

8) ์นด์šดํŒ…(Counting) ์ •๋ ฌ

  • O(n + k) : n์€ ๋ฆฌ์ŠคํŠธ์˜ ๊ฐœ์ˆ˜, k๋Š” ์ •์ˆ˜์˜ ์ตœ๋Œ€๊ฐ’
  • ์ •์ˆ˜๋กœ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋Š” ์ž๋ฃŒ์— ๋Œ€ํ•ด์„œ๋งŒ ์ ์šฉ ๊ฐ€๋Šฅ
  • ์นด์šดํŠธ๋ฅผ ์œ„ํ•œ ๊ณต๊ฐ„์„ ํ• ๋‹นํ•˜๊ธฐ ์œ„ํ•ด์„  ์ง‘ํ•ฉ ๋‚ด ๊ฐ€์žฅ ํฐ ์ •์ˆ˜๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

9) ๊ธฐ์ˆ˜(Radix) ์ •๋ ฌ

etc) Stable

etc) In-Place

etc) Comparsion

2. ์™„์ „ํƒ์ƒ‰

  • ์™„์ „ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜ -> ๋ชจ๋“  ๊ฒฝ์šฐ์˜ ์ˆ˜ ํƒ์ƒ‰
  • ๊ฑธ๋ฆฌ๋Š” ์‹œ๊ฐ„์€ ๊ฐ€๋Šฅํ•œ ๋‹ต์˜ ์ˆ˜์™€ ๋น„๋ก€

๋ฌธ์ œํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

  1. ์ฃผ์–ด์ง„ ๋ฌธ์ œ๋ฅผ ์„ ํ˜• ๊ตฌ์กฐ๋กœ ๊ตฌ์กฐํ™”
  2. ๊ตฌ์กฐํ™”๋œ ๋ฌธ์ œ๊ณต๊ฐ„์„ ์ ์ž˜ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ํ•ด๋ฅผ ๊ตฌ์„ฑํ•  ๋•Œ๊นŒ์ง€ ํƒ์ƒ‰ํ•œ๋‹ค.
  3. ๊ตฌ์„ฑ๋œ ํ•ด๋ฅผ ์ •๋ฆฌํ•œ๋‹ค.

3. ๊นŠ์ด/๋„ˆ๋น„ ์šฐ์„  ํƒ์ƒ‰(DFS/BFS)

3D(์“ฐ๋ฆฌ๋””) -> (์Šคํƒ - FILO - DFS)

  • ๊ฑฐ๋ฆฌ์ธก์ •์€ BFS๋งŒ ๊ฐ€๋Šฅ!
  • BFS, DFS ์‹œ๊ฐ„ ๋ณต์žก๋„
    • ์ธ์ ‘ ๋ฆฌ์ŠคํŠธ ๊ตฌํ˜„ -> O(N+E)
    • ์ธ์ ‘ ํ–‰๋ ฌ ๊ตฌํ˜„ -> O(N^2)

DFS (Stack, ์žฌ๊ท€)

  • ํ•œ ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜ ์„ ํƒ
  • ์„ ํƒํ•œ ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜ ์„ ํƒ (๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๋Š” ์ œ์™ธ)
  • ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ด์ „ ๋…ธ๋“œ๋กœ ๋Œ์•„์™€์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์„ ํƒํ•œ๋‹ค

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๋ฏธ๋กœ ์ƒ์„ฑ, Cycle Detection, ์œ„์ƒ ์ •๋ ฌ

BFS (Queue)

  • ํ•œ ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ํ์—์„œ ๋…ธ๋“œ๋ฅผ ํ•˜๋‚˜ ๊บผ๋‚ด์–ด ๊บผ๋‚ธ ๋…ธ๋“œ์—์„œ ๊ฐˆ ์ˆ˜ ์žˆ๋Š” ๋…ธ๋“œ๋ฅผ ํ์— ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ํ์— ๋…ธ๋“œ๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด break ํ•œ๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ์ตœ๋‹จ ๊ฒฝ๋กœ, ์ž„์˜ ๊ฒฝ๋กœ ํƒ์ƒ‰, ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ

4. ํƒ์š•๋ฒ•

  • ์ƒํ™ฉ๋งˆ๋‹ค ์ตœ์ ์˜ ๊ฐ’ ๊ฒฐ์ • -> ๋น ๋ฆ„

  • ์ˆ˜ํ–‰ ๊ณผ์ • (์„ ๊ฐ€๊ฒ€)

    1. ํ•ด ์„ ํƒ : ์ตœ์  ํ•ด -> ๋ถ€๋ถ„ ํ•ด ์ง‘ํ•ฉ์— ์ถ”๊ฐ€
    2. ์‹คํ–‰ ๊ฐ€๋Šฅ์„ฑ ๊ฒ€์‚ฌ : ๋ฌธ์ œ์˜ ์ œ์•ฝ์กฐ๊ฑด์— ์œ„๋ฐ˜๋˜์ง€ ์•Š๋Š”์ง€ ๊ฒ€์‚ฌ
    3. ํ•ด ๊ฒ€์‚ฌ : ๋ฌธ์ œ์˜ ํ•ด๊ฐ€ ๋˜๋Š”์ง€ ๊ฒ€์‚ฌ / ์ „์ฒด ๋ฌธ์ œ์˜ ํ•ด๊ฐ€ ์™„์„ฑ๋˜์ง€ ์•Š์•˜์œผ๋ฉด ํ•ด ์„ ํƒ๋ถ€ํ„ฐ ๋‹ค์‹œ ์‹œ์ž‘

5. ๋™์ ๊ณ„ํš๋ฒ•

  • ์ „์ฒด ๋ฌธ์ œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ํ•˜์œ„ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ’€๊ณ , ํ•˜์œ„ ๋ฌธ์ œ๋“ค์˜ ํ•ด๊ฒฐ๋ฐฉ๋ฒ•๋“ค์„ ๊ฒฐํ•ฉํ•˜์—ฌ ์ตœ์ข… ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋ฐฉ์‹
  • (์ž‘์€ ๋ฌธ์ œ๊ฐ€ ๋ฐ”๋€Œ์ง€ ์•Š์Œ)
  • ์ •๋‹ต์„ ํ•œ๋ฒˆ ๊ตฌํ–ˆ์œผ๋ฉด ๊ทธ ์ •๋‹ต์„ ์บ์‹œ์— ์ €์žฅ -> ๋ฉ”๋ชจ์ด์ œ์ด์…˜(๋ฐฐ์—ด์— ์ €์žฅ) ์ด๋ผ๊ณ  ํ•œ๋‹ค. (์กฐ๊ฑด์— ๋งž๋Š” ์ตœ์ ์˜ ๊ฐ’ ์ €์žฅ)

๊ทœ์น™์„ฑ ๋ฐœ๊ฒฌ -> ์ˆ˜์‹ ๋งŒ๋“œ๋Š” ๊ณผ์ • ์ค‘์š”!(์ ํ™”์‹)

1) Top-Down

  • ์žฌ๊ท€ ํ˜ธ์ถœ์„ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•œ๋‹ค.
  • ํŠน์ • ์กฐ๊ฑด(๋ณดํ†ต ๋ฐ”๋‹ฅ)๊นŒ์ง€ ์žฌ๊ท€ํ˜ธ์ถœ ํ•˜๊ณ  ํŠน์ • ๊ฐ’(๋ฐ”๋‹ฅ ๊ฐ’)์„ returnํ•œ๋‹ค.

2) Bottom-Up

  • ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด n์˜ ๊ฐ’์„ ์•Œ์•„๋‚ธ๋‹ค.

6. ๋ถ„ํ•  ์ •๋ณต

  • ์ž‘์€ ๋ฌธ์ œ๋กœ ๋‚˜๋ˆ„์–ด ํ‘ธ๋Š” ๋ฐฉ๋ฒ•

7. ๋ฐฑํŠธ๋ž˜ํ‚น

  • ์ฃผ์–ด์ง„ ๋ฌธ์ œ์˜ ๋‹ต์„ ๊ตฌํ•˜๊ธฐ ์œ„ํ•ด ํ˜„์žฌ ์ƒํƒœ์—์„œ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ํ›„๋ณด๊ตฐ์„ ๋”ฐ๋ผ ๊ฐ€๋ฉฐ ํƒ์ƒ‰ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ (๋ณดํ†ต visited ๋ฐฐ์—ด๋กœ ์ƒํƒœ ์ฒดํฌ)
  • ์žฌ๊ท€ํ˜ธ์ถœ์„ ํ•˜๊ธฐ์ „์˜ ์ƒํƒœ๋ฅผ ์žฌ๊ท€ํ˜ธ์ถœ์ด ๋๋‚œ ๋’ค ๋˜๋Œ๋ฆฌ๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ!

8. ์ด๋ถ„ํƒ์ƒ‰

  • Olog(N)

Tip!!

์žฌ๊ท€ํ•จ์ˆ˜

  • ์žฌ๊ท€ ํ•จ์ˆ˜๋Š” ์žฌ๊ท€ ๊นŠ์ด๊ฐ€ ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ๊ฒฝ์šฐ ์œ„์ฃผ๋กœ ์‚ฌ์šฉ
  • ์ˆœํ™˜ ์กฐ๊ฑด / ์ข…๋ฃŒ์กฐ๊ฑด
  • (๋ฐ˜๋“œ์‹œ ํŠน์ • ์ž…๋ ฅ์— ๋Œ€ํ•ด์„œ ์ž๊ธฐ ์ž์‹ ์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š๊ณ  ์ข…๋ฃŒ - Base Codition) ํ•„์š”!

์žฌ๊ท€ ํ•จ์ˆ˜ ์กฐ๊ฑด

    1. ์ž๊ธฐ์ฐธ์กฐ๋ฅผ ํ•˜์ง€ ์•Š๋Š”๋‹ค.
    1. ์›ํ•˜๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ธ๋‹ค.
    1. ์žฌ๊ท€ํ˜ธ์ถœ์˜ ๋ฐฉํ–ฅ์ด ๊ธฐ์ €์‚ฌ๋ก€๋กœ ๊ฐ€์•ผ ํ•œ๋‹ค.

์‹œ๊ฐ„ ๋ณต์žก๋„

    1. ์žฌ๊ท€ ํ˜ธ์ถœ์˜ ์ตœ๋Œ€ ๊นŠ์ด (x)
    1. ์žฌ๊ท€ํ˜ธ์ถœ์„ ์ œ์™ธํ•œ ์‹œ๊ฐ„ ๋ณต์žก๋„ (y)
    1. ํ•˜๋‚˜์˜ ํ˜ธ์ถœ์—์„œ ์žฌ๊ท€ํ•จ์ˆ˜์˜ ํ˜ธ์ถœ ํšŸ์ˆ˜ (z)
  • => O(y*z^x)

9. ๊ฒ€์ƒ‰

1) ์ˆœ์ฐจ๊ฒ€์ƒ‰

  • ์ˆœ์„œ๋Œ€๋กœ ๊ฒ€์ƒ‰
  • ํ‰๊ท  ๋น„๊ต ํšŸ์ˆ˜ : (N+1)/2
    • ์ •๋ ฌ์ด ๋˜์–ด์žˆ์„ ๊ฒฝ์šฐ ํ‰๊ท  ๋น„๊ต ํšŸ์ˆ˜๊ฐ€ ๋ฐ˜์œผ๋กœ ์ค„์–ด๋“ ๋‹ค.
  • ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)

2) ์ด์ง„๊ฒ€์ƒ‰

  • ๊ฐ€์šด๋ฐ ํ‚ค ๊ฐ’๊ณผ ๋น„๊ตํ•˜์—ฌ ๋‹ค์Œ ๊ฒ€์ƒ‰ ์œ„์น˜ ๊ฒฐ์ • ํ›„, ๊ฒ€์ƒ‰

  • ์ž๋ฃŒ๊ฐ€ ์ •๋ ฌ๋œ ์ƒํƒœ์—ฌ์•ผ ํ•œ๋‹ค.

  • ์‹œ๊ฐ„ ๋ณต์žก๋„ O(logN)

  • ์‹œ์ž‘์ ๊ณผ ์ข…๋ฃŒ์ ์„ ์ด์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ ๋ฐ˜๋ณต

  • ์ž๋ฃŒ์˜ ์‚ฝ์ž…์ด๋‚˜ ์‚ญ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ •๋ ฌ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๋Š” ์ž‘์—… ํ•„์š”

3) ์ธ๋ฑ์‹ฑ

10. ์ตœ๋‹จ๊ฑฐ๋ฆฌ

// TODO : ๋ธ”๋กœ๊ทธ ๊ธ€ ์ถ”๊ฐ€ ์˜ˆ์ •

1) ๋‹ค์ต์ŠคํŠธ๋ผ ์•Œ๊ณ ๋ฆฌ์ฆ˜

2) ํ”Œ๋กœ์ด๋“œ ์›Œ์…œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

3) ๋ฒจ๋งŒ ํฌ๋“œ ์•Œ๊ณ ๋ฆฌ์ฆ˜

JAVA Tip!

  • ์‹ค์ˆ˜ํ˜• ์‚ฌ์šฉํ•  ๋• double ์“ฐ๋Š”๊ฒŒ ์ข‹๋‹ค!

  • ๋ฌธ์ž์—ด ์ถ”๊ฐ€ : String class์‚ฌ์šฉ StringBuilder class ์‚ฌ์šฉ

  • intํ˜• ์ž๋ฆฌ์ˆ˜ ๊ตฌํ•˜๊ธฐ : Math.log(์ˆซ์ž)+1;

  • ๊ฑฐ๋“ญ์ œ๊ณฑ ๊ตฌํ•˜๊ธฐ : Math.paw(a, b);

  • Int to String : Integer.toString();

  • String to Int : Integer.parseInt();