Frontend Study - 2/자료구조와 알고리즘

알고리즘 (1) : 문제 해결을 위한 계획 수립

갓데미 2023. 1. 1. 11:44

알고리즘의 사전적 정의

- 특정 작업을 달성하기 위한 과정이나 일련의 단계.

즉 문제 해결을 위해 수행해야 하는 단계이다.

 

'개발' 이라는 것은 곧 문제해결이기도 하고

알고리즘은 성공적인 문제해결을 위한 기반이기 때문에

알고리즘에 대해 알아야 한다.

 

알고리즘을 통해 문제해결을 '잘' 하기 위해서 준비할 수 있는 두가지 단계가 있다.

 

1. 문제 해결을 위한 계획을 수립하는 것.

2. 일반적인 문제 해결 패턴을 파악하는 것.

 

 

 

이 중 첫번째 문제 해결을 위한 계획 수립에 대하여 먼저 알아보려고 한다.

문제 해결은 중요하고 대충해서는 안된다. 단계별로 계획을 수립하는 것이 좋다. 

문제를 고민하고 나누면서 자연스럽게 해결책을 찾도록 돕는다. 

 

 

1) 문제를 바로 이해하기

 

바로 코드를 쓰는 것에 앞서 문제를 확실하게 이해하는 것이 정말 정말 정말 정말 중요하다.

코딩테스트나 다른 문제에 봉착했을때 문제를 제대로 파악하지 못해서 모든걸 갈아엎고 처음부터 시작해야 했던 경우가 있었다.

시간이 조금 더 걸리더라도 명확하게 이해하고 풀어나갈 수 있어야 한다.

 

- 문제를 내 방식대로 재정립.

- 문제의 입력 값과, 그 값을 통해 어떤 형식의 값을 출력해야 하는지 파악한다.

 

 

 

2) 구체적 예제들

 

직접 값들을 생성해서 대입해 보고 결과값을 체크해 본다.

 

- 예외 사항에 대한 체크 (공백은? 대소문자 구별은? 아무것도 입력하지 않았을 때는? 숫자값이나 불리언 값일때는?)

 

 

3) 세부 분석

 

문제를 세분화 하는 것. 단계들의 틀을 잡고 각 단계에 집중할 수 있도록 돕는다. 이 단계는 감이 잡히지 않는 문제에 대해 감을 잡을 수 있게 해주기도 한다. 

 

ex)
// 빈 오브젝트 값 하나 생성

// 주어진 string값 순환하며 개수 추가

  //키 값 기존에 존재하면 +1 , 없다면 새로 만들어주고 +1

  // 공백, 점, 특수문자라면 아무것도 하지 않기

// 개수를 담은 오브젝트 리턴

 

 

4) 해결 || 단순화

 

어려운 부분에서 막혀있다면, 우선 그 부분을 무시하고 단순한 해결책을 작성한 다음, 다시 어려운 부분을 통합시키는 것.

 

 

5) 되돌아보기 , 리팩토링

 

할 수 있는 질문들.

 

- 다른 방법으로 접근할 수 도 있나?

- 직관적으로 코드가 의미하는 바를 이해할 수 있나?

- 결과나 방법을 다른 문제에도 적용할 수 있나?

- 성능을 향상시킬 수 있나?

- 어떻게 하면 더 나은 성능을 도출할 수 있나?

- 다른사람들은 어떻게 이 문제를 해결했나?

 

 

참고사이트

https://www.udemy.com/course/best-javascript-data-structures/