πŸ’» cs

[CS] APS, μ‹œκ°„ λ³΅μž‘λ„ 정리

c0zi 2024. 1. 30. 17:05

πŸ” APSλž€ 무엇인가

APS : Algorithm Problem Solving

 

λ‚˜λ„ κ°•μ˜μ—μ„œ 처음 λ“£κ²Œ 된 APS,, ν•œλ²ˆ 정리해보렀 ν•œλ‹€.

 

μš°μ„  APSλŠ” μ•Œκ³ λ¦¬μ¦˜ 문제 풀이 방법을 λ§ν•œλ‹€.

μ•Œκ³ λ¦¬μ¦˜ 문제 ν’€μ΄λ²•μ—λŠ” λ§Žμ€ 것듀이 있고, κ·Έμ€‘μ—μ„œ μ£Όμ–΄μ§„ λ¬Έμ œμ— 따라 μ›ν•˜λŠ” κ²°κ³Όλ₯Ό λ‚Ό 수 μžˆλ„λ‘ ν”„λ‘œκ·Έλž¨μ„ μž‘μ„±ν•˜λŠ” 것이 λͺ©ν‘œμ΄λ‹€. 

 

κ·Έλ ‡λ‹€λ©΄ APS κ³΅λΆ€λŠ” μ™œ ν•΄μ•Ό ν• κΉŒ ??

 

1. μ•Œκ³ λ¦¬μ¦˜ 풀이법을 κ³΅λΆ€ν•˜λ©΄μ„œ 문제 κ΅¬ν˜„λ ₯을 κΈ°λ₯Ό 수 μžˆλ‹€.

2. λ‹€μ–‘ν•œ λ¬Έμ œκ°€ λ°œμƒν•˜λŠ” 경우의 디버깅 κ²½ν—˜μ„ μŒ“μ„ 수 μžˆμ„ 것이닀.

  • μ•Œκ³ λ¦¬μ¦˜ 문제 풀이λ₯Ό ν•˜λ©° λ°œμƒν•˜λŠ” 였λ₯˜λ“€μ„ 접해보고, μ΄λŸ¬ν•œ 였λ₯˜λ₯Ό ν•΄κ²°ν•΄ λ‚˜κ°€λŠ” κ³Όμ • μžμ²΄μ—μ„œ μš°λ¦¬λŠ” λ§Žμ€ 것을 배우고 μ„±μž₯ν•  수 μžˆλ‹€.

3. λ…Όλ¦¬μ μœΌλ‘œ μ‚¬κ³ ν•˜λŠ” 법을 배우게 λœλ‹€.

  • μ—¬λŸ¬ μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•˜λ©° 문제λ₯Ό ν’€λ©΄μ„œ λ…Όλ¦¬μ μœΌλ‘œ 문제λ₯Ό ν’€μ–΄κ°€λŠ” 방법에 λŒ€ν•΄ 배울 수 μžˆλ‹€.

 

μ΄λŸ¬ν•œ APS의 λͺ©ν‘œλŠ” μ‹€ν–‰μ‹œκ°„μ„ μ€„μ΄λŠ” 것에 μžˆλ‹€. 적은 μ‹€ν–‰μ‹œκ°„μœΌλ‘œ μ •ν™•ν•˜κ²Œ 문제λ₯Ό ν‘ΈλŠ” 것이 κ°€μž₯ μ€‘μš”ν•˜λ‹€.

λ‚˜λ„ μ•Œκ³ λ¦¬μ¦˜ 문제λ₯Ό 본격적으둜 ν’€κΈ° μ‹œμž‘ν•˜λ©΄μ„œ μ‹€ν–‰μ‹œκ°„μ„ 쀄이기 μœ„ν•œ 고민을 ν•˜κ²Œ λ˜μ—ˆλ‹€. λ‚˜μ€‘μ— 더 κ³΅λΆ€ν•˜κ³  λ§Žμ€ λ¬Έμ œλ“€μ„ ν’€μ–΄λ³΄λ©΄μ„œ, 같은 ν’€μ΄μ—μ„œλ„ μ‹€ν–‰ μ‹œκ°„μ„ 쀄일 수 μžˆλŠ” 방법을 κ³ λ―Όν•΄ 보고 정리해 올릴 κ³„νšμ΄λ‹€.

 

⏱ μ‹œκ°„ λ³΅μž‘λ„

μž‘λ™ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ·¨ν•΄ μ‹œκ°„μ„ μ •λŸ‰ν™”ν•˜λŠ” 것이닀. μ•Œκ³ λ¦¬μ¦˜μ˜ μ‹œκ°„λ³΅μž‘λ„λŠ” 주둜 λΉ…-였 ν‘œκΈ°λ²•μ„ μ‚¬μš©ν•˜μ—¬ λ‚˜νƒ€λ‚Έλ‹€. - by. μœ„ν‚€λ°±κ³Ό

 

λ‹€μ‹œ μ„€λͺ…ν•˜μžλ©΄ μ‹œκ°„ λ³΅μž‘λ„λŠ” μ‹€ν–‰λ˜λŠ” λͺ…λ Ήλ¬Έμ˜ κ°œμˆ˜μ™€ λ‘œμ§μ„ 톡해 ν”„λ‘œκ·Έλž¨ μ‹€ν–‰ μ‹œ κ±Έλ¦¬λŠ” μ‹œκ°„μ„ λ‚˜νƒ€λ‚Έ ν•¨μˆ˜μ΄λ‹€.

 

μ‹€ν–‰μ‹œκ°„μ„ 쀄이기 μœ„ν•΄μ„œ, 즉 효율적으둜 μ•Œκ³ λ¦¬μ¦˜μ„ 짜기 μœ„ν•΄μ„œλŠ” μž…λ ₯값이 컀지더라도 적은 연산을 톡해 κ²°κ³Όλ₯Ό 찾을 수 μžˆλŠ” μ‹œκ°„μ„ λ‹¨μΆ•μ‹œν‚€λŠ” 것이 μ€‘μš”ν•˜λ‹€.

 

μ΄λŸ¬ν•œ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό λ‚˜νƒ€λ‚΄λŠ” 것이 λ°”λ‘œ Big-O ν‘œκΈ°λ²•μ΄λ‹€.

 

더보기

μž‘λ…„μ— λ…ν•™μœΌλ‘œ λΉ…μ˜€ ν‘œκΈ°λ²•μ— λŒ€ν•΄ 곡뢀λ₯Ό ν•˜λ €λ‹€κ°€ 무슨 말인지 λͺ¨λ₯΄κ² κ³ , 예제λ₯Ό μ ‘ν•˜κΈ° μ–΄λ €μ›Œ ν¬κΈ°ν–ˆμ—ˆλŠ”λ° μ‹Έν”Όμ—μ„œ λ°°μš°λ‹ˆκΉŒ 생각보닀 μ–΄λ €μš΄ λ‚΄μš©μ΄ μ•„λ‹ˆλΌ λ‹Ήν™©ν–ˆλ‹€ ..

 

πŸ“ƒ Big-O ν‘œκΈ°λ²•

Big-O ν‘œκΈ°λ²•μ˜ 경우 연산이 κ°€μž₯ 많이 μΌμ–΄λ‚˜λŠ” 경우(μ΅œμ•…μ˜ 경우)λ₯Ό κ°€μ •ν•œλ‹€.

 

예λ₯Ό λ“€μ–΄, λ°°μ—΄μ˜ μ•žμ—μ„œλΆ€ν„° ν•˜λ‚˜μ”© 비ꡐλ₯Ό 찾을 λ•Œ {1, 44, 8, 34, 59, 90, 50}μ΄λΌλŠ” 배열이 μžˆμ„ 경우 50μ΄λΌλŠ” 값을 μ°ΎκΈ° μœ„ν•΄μ„œλŠ” 7번의 비ꡐ 끝에 50을 찾을 수 μžˆμ„ 것이닀. 이와 같은 경우λ₯Ό μ‹œκ°„λ³΅μž‘λ„μ—μ„œ μ΅œμ•…μ˜ 경우라고 ν•˜κ³ , 1을 μ°ΎλŠ” 경우 ν•œ λ²ˆμ— λ°”λ‘œ 찾을 수 있기 λ•Œλ¬Έμ— μ΅œμ„ μ˜ 경우라고 ν•œλ‹€.

 

μ§€κΈˆμ˜ μ˜ˆμ‹œλŠ” μ›μ†Œκ°€ 7κ°œμ— λΆˆκ³Όν•˜μ§€λ§Œ μ›μ†Œμ˜ κ°œμˆ˜κ°€ 10000개λ₯Ό λ„˜μ–΄κ°„λ‹€λ©΄ μ–΄λ–¨κΉŒ ? μ•„λ§ˆ μ΅œμ„ μ˜ κ²½μš°μ™€ μ΅œμ•…μ˜ 경우 차이가 κ½€ 컀질 것이닀. 

 

μ΄λ ‡κ²Œ λ‹€μ–‘ν•œ 경우의 수 μ€‘μ—μ„œ κ°€μž₯ 연산이 였래 κ±Έλ¦¬λŠ” 경우λ₯Ό λŒ€λΉ„ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ—, Big-O ν‘œκΈ°λ²•μ„ 자주 μ‚¬μš©ν•˜κ²Œ λœλ‹€.

 

Big-O ν‘œκΈ°λ²•μ˜ μ’…λ₯˜

 

 

μœ„μ˜ κ·Έλž˜ν”„λŠ” Big O μ‹œκ°„ λ³΅μž‘λ„μ—μ„œ μš”μ†Œ μˆ˜μ— λ”°λ₯Έ μ—°μ‚° 수λ₯Ό λ‚˜νƒ€λ‚Έ κ·Έλž˜ν”„μ΄λ‹€.

 

O(log n), O(n)의 경우 μš”μ†Œμˆ˜κ°€ 많이 λŠ˜μ–΄λ‚˜λ”λΌλ„ μ—°μ‚° μˆ˜κ°€ 크게 차이 λ‚˜μ§€ μ•ŠλŠ”λ°, O(n!)μ΄λ‚˜ O(2^n)κ³Ό 같은 κ²½μš°μ—λŠ” μš”μ†Œμˆ˜κ°€ 10만 λ˜λ”λΌλ„ μ—°μ‚°μ˜ μˆ˜κ°€ κΈ°ν•˜κΈ‰μˆ˜μ μœΌλ‘œ λŠ˜μ–΄λ‚˜λŠ” 것을 λ³Ό 수 μžˆλ‹€.

 

μ΄λŸ¬ν•œ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό μ•Œκ³  λ‚˜λ©΄, 문제λ₯Ό ν’€ λ•Œμ— μ–΄λ–€ μ•Œκ³ λ¦¬μ¦˜μ„ μ μš©ν•΄μ•Ό μ‹œκ°„μ΄ˆκ³Όκ°€ μΌμ–΄λ‚˜μ§€ μ•Šμ„ 수 μžˆμ„μ§€ μ˜ˆμƒν•˜λ©° ν’€ 수 있게 λœλ‹€.

 

그럼 λ‹€μŒμ—λŠ” λͺ‡ κ°€μ§€ 정렬을 λ³΄λ©΄μ„œ μ‹œκ°„ λ³΅μž‘λ„λ₯Ό ꡬ해보도둝 ν•˜μž.