3. Algorithms and Problem Solving Patterns (1)

수원 개발자·2023년 12월 10일

JavaScript 알고리즘

목록 보기
4/5

What is An Algorithm

알고리즘은 특정 작업을 달성하기 위한 과정이나 일련의 단계를 말한다.

왜 알고리즘을 알아야할까?

프로그래밍에서 수행하는 거의 모든 작업에는 아주 기본적인 작업이든 복잡한 애플리케이션을 구축하든 일종의 알고리즘이 포함되므로 문제를 해결할 방법을 마련할 수 있도록 결정을 해야한다.

어떻게 해야 알고리즘을 잘 이해할 수 있을까

  1. 문제 해결을 위한 계획을 수립하자
  2. 일반적인 문제 해결 패턴을 파악하자

문제 해결하기

  1. 문제를 이해하자
  2. 구체적인 예제들을 생각해자
  3. 세분화하자 그리고 분석하자
  4. 문제를 해결하고 단순화하자
  5. 문제를 복습하고 재구성하자

Understand the Problem

어떠한 문제를 마주칠때 우선 해야할 것은 문제를 이해하는 것이다.

  1. 면접관의 말을 그대로 생각하는 게 아닌 나만의 방식으로 바꿔서 질문이 무엇인지를 실제로 이해하자
  2. 입력 값이 무엇이고 출력 값이 무엇이여야 할까?
  3. 출력 값이 입력 값으로부터 정의될 수 있을까? 또한 내가 문제를 풀기위해 충분한 정보가 있는가?
  4. 문제의 일부인 데이터의 중요한 부분에 어떻게 라벨을 지정할 수 있을까? -> 문제에서 정말 중요한 것은 무엇일까

ex. 두 숫자를 가지고 합계를 반환하는 함수를 작성해보자!

  1. 나의 방식으로 숫자를 더하거나 덧셈을 수행하는 함수를 작성하자.
  2. 입력 값과 출력 값의 타입과 입력 방법에 대해 생각해보자.
  3. 문제에 대해 충분한 정보가 있는지 생각해보자.
  4. 무엇이 중요한가 생각해보자. 출력 값과 입력 값에 대해 생각해서 생각해서 어떻게 나와야하는지 생각하면 문제를 풀기 쉽다.

예시 살펴보기

질문을 이해하면서 입력값, 출력값 등 모든 사항들을 확실히 이해하고자 애를 쓴다.

예시를 떠올리는 것이 문제를 잘 이해하는데 도움이 될 것이다.

또한 예시는 온전성 검사를 제공하므로 최종 해결책을 입력했다면 제대로 작동하는지 검사를 통해 구현한 작업을 확인할 수 있을 뿐 아니라 예시를 적용하면서 더 많은 정보를 습득할 수도 있다.
문제는 맞닥트리면 우선 해야 할 일은 간단한 예시로 시작하는 것이다.

코드를 작성하기 전 문제를 세분화해보자

문제를 문제하겠다는 말은 문제에 대한 단계들을 실제로 수행하면서 작성을 한다는 것이다.
해결책의 기본적인 구성 요소만 작성해보자.

단계들의 틀을 잡고 항상 집중할 수 있도록 도울 뿐만 아니라 확신이 들지 않는 문제를 짚을 수 있게 해준다.

단순화하기!

즉, 문제를 해결할 수 있다면 해결하고 해결할 수 없다면 더 단순한 문제를 해결하라.
수행하려는 작업에서 혼란에 빠트리는 가장 어려운 부분을 찾게 된다면 잠깐 동안 어려운 부분을 무시하고 단순한 해결책을 작성한 다음 다시 어려운 부분을 가능하다면 다시 통합시킨다.

리팩토링

시간을 내어 코드를 살펴보고 되돌아보고 성찰하는 것은 매우 좋은 기회다.

각 구성요소를 한 줄씩 살펴 보면서 마음에 들지 않는 부분이나, 코드의 형태, 해석 방법, 또 이해하기 얼마나 쉬운지에 대해 이야기를 하라는 의미다.
한 줄씩 코드를 읽으면서 생각한다.

이상적이지 않은 부분에 더 나은 방법을 적용할 수 있을 텐데 확신이 들지 않으니 더 빨리 처리할 수 있는 다른 방법을 검색해 봐야겠다 이런 생각들을 하는 것이다.

정리

우선 문제를 확실히 이해하는 단계다.
또한 뭔가 작업을 수행하면서 어떤 해결책을 마련할지, 애플리케이션이 어떻게 구동되도록 할지 각 상황에서 어떤 식으로 작동되도록 할지에 대해 확실히 이해하기 위해서도 마찬가지다.
이는 구체적인 예시를 살펴보는 것과도 관련이 있다.
세분화 단계에서는 완벽한 의사코드를 한 줄씩 작성하는 것도 좋지만 구현해야 할 코드에 대한 계획의 틀을 잡기 위한 단계를 몇 가지로 세분화하는 것도 좋다.
코드를 작성하기 전에 방향을 확실히 정해야 한다.
다음은 해결 단계다.
문제를 당장 해결할 수 없다면 해결할 수 있는 문제부터 처리하시기 바란다.
단순한 문제 같더라도 더 단순화하면 핵심적인 어려운 부분이 사라진다.
해결할 수 있는 부분을 먼저 처리하면 어려운 부분을 다시 통합할 수 있을 것이다.
마지막으로 말씀드렸던 개발자로서 배우거나 향상하는 데 있어서 중요한 것은 코드를 되돌아보고 리팩토링하고, 때로는 되돌아보고 분석하면서 자신을 격려하는 것이다.

0개의 댓글