oris9
[알고리즘/자료구조]알고리즘과 수도코드 본문
알고리즘(algorithm)
문제를 해결하기 위한 여러 동작들의 모임
어떤 기능이 일어나기 위해 내재된/독립된 단계적 명령어들의 집합
1) 알고리즘의 조건
입력 : 외부에서 제공되는 자료가 0개 이상 존재
출력 : 적어도 2개 이상의 서로 다른 결과 도출
명확성 : 모호하지 않은 명령어로 구성되며 수행 과정이 명확해야 함 (→ 정밀/유일성)
유한성(종결성) : 유한 번의 명령어를 수행 후(유한 시간 내) 종료
효율성 : 모든 과정은 명백하게 실행가능(검증가능) 한 것이어야 한다. (=타당성)
알고리즘 전략세우기(Pseudo-code)
수도코드란? (Pseudo-code, 의사코드)
코드를 작성할때 간단하게 프로그램의 진행과정을 단계별로 기록해 놓으면서 알고리즘을 구상하는 방법을 말한다.
프로그램의 문제를 해결할때나, 다른 사람들과 프로그램의 흐름에 대해 소통하기 위한 방법으로 사용된다.
프로그램을 계획하는 초반 단계와 그 프로그램 코드를 실제로 작성하는 최종 단계를 이어 주는 도구로써,
잘 작성된 의사코드는 실제 코드의 주석으로 활용될 수 있다.
알고리즘의 작동 과정을 묘사하고 싶은 경우나 기술적인 부분을 잘 모르는 사람에게 프로그램의 진행 과정을 설명할 때 또는 여러 사람이 함께 개발할 때 사용한다.
```
if 업무 시간 > 평균 근무 시간
then초과 근무 메시지를 표시한다.
else일반적인 근무 메시지를 표시한다.
endif
```
와 같이 작성할 수 있다. (하지만 정해진 표준이나 규칙은 존재하지 않는다)
한 줄에 하나의 명령만 적는다.
어떻게 코드로 표현할지 적지 말고, 하고 싶은 이야기가 뭔지 기록한다.
어떤 것도 상상에 맡기지 않고 기재한다.
표준적인 프로그래밍 구조를 따른다.
일반적인 알고리즘 순서
① 문제 정의 → ② 모델 고안 → ③ 명세 작성 → ④ 설계 → ⑤ 검증 → ⑥ 분석(복잡도 등) → ⑦ 구현 → ⑧ 테스트 → ⑨ 문서화
자연어 ↔ 프로그래밍 언어 사이의 방식을 단계별로 기록
ⅰ. 프로그램의 진행 과정에 조금이라도 관심이 있는 사람이라면, 이 의사 코드를 읽고 이해할 수 있을까?
ⅱ. 이 의사 코드는 실제 코드로 쉽게 바뀔 수 있을까?
ⅲ. 과정을 진행하는데 필요한 단계 중, 빠뜨린 것은 없나?
ⅳ. 의사 코드를 읽는 사람들이 이해할 수 있는 용어들을 사용했는가?
3) 좋은 알고리즘의 분석 기준
Correctness : 문제를 해결하는가
Efficiency : 이를 효과적으로 하는가
참고
https://velog.io/@cha-suyeon/Algorithm-%EC%8B%9C%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84-%EA%B3%B5%EA%B0%84-%EB%B3%B5%EC%9E%A1%EB%8F%84
https://velog.io/@leemember/%EC%BD%94%ED%85%8C-%EB%8C%80%EB%B9%84-%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0%EC%99%80-%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98
https://velog.io/@tataki26/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%ED%8F%89%EA%B0%80%EB%B2%95
https://velog.io/@leobit/%EB%B3%B5%EC%9E%A1%EB%8F%84Complexity
https://velog.io/@leobit/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98Algorithm
'알고리즘, 자료구조' 카테고리의 다른 글
[알고리즘] 복잡도 (시간복잡도, 공간복잡도) 알아보기 (0) | 2024.04.09 |
---|---|
[코딩테스트] 프로그래머스 배열 만들기 2 (0) | 2024.03.14 |