본문 바로가기
프로그래밍

알고리즘 문제 풀이 방법에 대해서.

by 탁구치는 개발자 2013. 3. 8.

나는 어떤 문제를 풀 때 항상 코딩을 먼저 시작한다.

헌데 이와 같이 생각하지 않은 상태에서 바로 코딩을 하게 되면 알고리즘이 산으로 가는 일이 비일비재하였고, 가장 큰 어려움은 잘못된 알고리즘으로 인한 틀에 갇혀 시야가 좁아진다는 것이다.

결국 1시간 만에 할 수 있는 일을 하루 종일 투자하여도 해결하지 못하는 일이 발생하였다.


이제는 이와 같이 개발을 하면 안되는 것을 느끼기에 다음과 같이 룰을 정하고, 이에 맞게 처리하고자 한다.

1. 풀어야 하는 문제를 종이에 서술형으로 작성한다.

2. 서술형으로 나열된 문장에서 변수로 선언할 것들에 동그라미를 친다.

3. 조건문에 해당하는 부분은 세모를 친다.

4. 변수 네이밍을 한다.

5. 코딩한다.

6. 성공 케이스의 테스트를 한다.

7. 실패 케이스의 테스트를 한다.


아래는 위의 절차를 통해서 가우스 덧셈식을 코딩한 것이고 해법은 간단하다.

아래와 같이 첫 번째 자리와 마지막 자리의 합이 11이 되고, 두 번째 자리와 마지막 두 번째 자리의 합이 11이 되는 것 처럼 두 수의 합은 항상 11이 나온다.

위와 같은 가우스 덧셈식의 해법을 통해 결과 값을 뽑는 다면 11 * 10 = 110이 된다. 여기서 11의 값은 첫 번째 자리의 수와 마지막 자리의 수를 합하면 금방 뽑을 수 있다.

이때 곱해야 하는 10이라는 숫자는 아래와 같이 숫자를 나열한 후 카운팅을 해야 할까? 이런 경우 (1 - 10 + 1) / 2 의 공식을 통해 금방 추출할 수 있다.

1 2 3 4 5 6 7 8 9 10

+ 10 9 8 7 6 5 4 3 2 1

-----------------------------------------------------------------------------------------------

11 11 11 11 11 11 11 11 11 11


위와 같은 풀이를 통해 코드를 작성해 보자.




순서도 까지는 추가하지 않았는데 만약 복잡한 알고리즘이라면 순서도를 추가하여 정리하는 것이 개발을 할 때나 유지보수를 할 때나 유용할 것이라 본다.