순서도는 코드의 축약본이 아니라 구조 검토 도구입니다
코드는 변수 타입과 문법까지 정확히 적어야 하지만, 순서도는 “어떤 상태에서 무엇을 검사하고 어디로 되돌아가는가”를 먼저 드러냅니다. 특히 반복이 언제 끝나는지, 비교 결과가 모든 경우를 덮는지, 실패할 때 무엇을 반환하는지는 코드 한 줄씩 읽는 것보다 순서도로 검토하기 쉽습니다.
알고리즘 순서도의 다섯 요소
| 요소 | 표현 | 검토 질문 |
|---|---|---|
| 입력·초기화 | 시작·과정 | 알고리즘이 시작할 때 필요한 값은 무엇인가? |
| 반복 조건 | 조건 | 언제 계속하고 언제 멈추는가? |
| 비교·선택 | 조건 | 가능한 결과가 빠짐없이 연결되는가? |
| 상태 갱신 | 과정 | 다음 반복 전에 무엇이 줄거나 바뀌는가? |
| 종료·반환 | 결과 | 성공과 실패가 모두 명시됐는가? |
반복선에는 반드시 ‘변화’를 남깁니다
반복 화살표만 그리면 무한 반복인지 의도적인 재시도인지 알 수 없습니다. 되돌아가는 연결선에 “인덱스 증가”, “범위 축소”, “다음 후보”처럼 상태가 어떻게 바뀌는지 적으세요. 그 변화가 없으면 알고리즘은 종료 조건에 도달할 수 없습니다.
좋은 조건: “계속할까?”보다 “low ≤ high?”처럼 비교 대상과 기준이 있는 질문이 구현으로 바로 옮기기 쉽습니다.
이진 탐색으로 검토하는 방식
이진 탐색은 순서도의 장점을 잘 보여 줍니다. low ≤ high가 반복 조건이고, 가운데 값이 목표와 같은지 성공을 판정하며, 작거나 큰 경우에만 범위를 갱신합니다. 세 분기 모두 다음 상태가 정해져 있고, 매번 범위가 줄어들기 때문에 종료를 설명할 수 있습니다.
- 정렬된 배열과 목표값을 입력으로 둡니다.
- low와 high를 초기화합니다.
- 남은 범위가 있는지 검사합니다.
- 가운데 값이 목표와 같은지 확인합니다.
- 작으면 low, 크면 high를 갱신하고 반복 조건으로 돌아갑니다.
- 범위가 비면 실패 결과로 끝냅니다.
자주 생기는 오류
- 성공 경로만 그리고, 찾지 못했을 때의 결과를 빼놓는 경우
- 한 조건 노드에 여러 비교를 넣어 어느 분기인지 읽을 수 없게 만드는 경우
- 반복선은 있지만 인덱스·범위·카운터 갱신이 없는 경우
- 정렬 여부처럼 알고리즘이 성립하는 전제를 메모하지 않는 경우
코드로 옮기기 전 체크
- 모든 조건 노드에 가능한 답이 빠짐없이 이어지는가?
- 되돌아가는 경로마다 상태를 바꾸는 과정이 있는가?
- 성공과 실패가 서로 다른 결과 노드에서 끝나는가?
- 입력의 전제와 경계값(빈 배열, 첫·마지막 값)이 고려됐는가?
