알고리즘이란?
1. 문제를 해결하기 위한 단계적 절차 또는 방법
2. 순서대로 구체적이고 명확하게 기술해야 한다.
3. 유효한 입력을 받아 실행한 결과인 해(답)를 출력한다


위와같이 알고리즘을 작성할 때는 명확하고 정확하게 작성을해야 한다.

다음 알고리즘을 구현해 보자.
입력값이 5일 경우 1 ~ 5의 합을 구하는 알고리즘 코드는 위와 같이 구현하면 된다.

위 코드는 잘못된 알고리즘이다. 이유는 무엇일까?
product = 0이라고 선언한 뒤 while의 조건에 product < 20을 돌리면 무한루프에 걸리게된다.
따라서 잘못된 알고리즘이다.

보통 알고리즘을 구현할 때 어려운 문제를 풀수록 문제를 이해하는데 시간이 오래걸린다. 알고리즘 설계도 물론 중요하지만 다양한 문제들을 풀어보며 문제를 이해하는 과정을 학습하는게 중요할 것 같다.


배열이 주어진 후 74를 찾는 순차탐색 알고리즘을 구현해보자.
arr에 배열을 저장하고 찾을 값 n을 입력한다.
배열을 sort()로 정렬해준다.
배열의 길이를 하나씩 읽어들인 후 n과 값이 같다면 "있다"를 출력한뒤 종료한다.
만약 값이 없다면 "없다"를 출력한다.
이번엔 이진탐색으로 알고리즘을 구해보자.
n에 찾는 값을 입력받고 arr에 배열을 저장한 뒤, sort()로 정렬해준다.
start노드 = 0, end노드는 배열의 길이 -1을 해줘서 뒤의 값부터 읽어오도록 저장한다.
시작노드부터 끝노드까지 반복문을 만들고
중간값 변수를 생성한뒤 (start + end) /2 를 해서 배열의 중간값을 구한다
중간값이 n이라면 있다를 출력하고 종료한다.
중간값이 n이 아니라면 중간값이 n보다 작을경우 start(첫노드)부터 하나씩 찾고
중간값이 n보다 클경우 end(마지막 노드)부터 하나씩 찾는다.
모든 배열을 찾은 뒤 n을 발견하지 못했을경우 반복문을 종료하고 "없다"를 출력한다.
최댓값찾기 문제

'알고리즘(이충기 교수)' 카테고리의 다른 글
알고리즘 3주차( 분할 정복) (0) | 2023.09.25 |
---|---|
알고리즘 2주차( 알고리즘의 효율성 분석) (0) | 2023.09.25 |
알고리즘 0주차(사전 평가시험) (0) | 2023.09.07 |
알고리즘이란?
1. 문제를 해결하기 위한 단계적 절차 또는 방법
2. 순서대로 구체적이고 명확하게 기술해야 한다.
3. 유효한 입력을 받아 실행한 결과인 해(답)를 출력한다


위와같이 알고리즘을 작성할 때는 명확하고 정확하게 작성을해야 한다.

다음 알고리즘을 구현해 보자.
입력값이 5일 경우 1 ~ 5의 합을 구하는 알고리즘 코드는 위와 같이 구현하면 된다.

위 코드는 잘못된 알고리즘이다. 이유는 무엇일까?
product = 0이라고 선언한 뒤 while의 조건에 product < 20을 돌리면 무한루프에 걸리게된다.
따라서 잘못된 알고리즘이다.

보통 알고리즘을 구현할 때 어려운 문제를 풀수록 문제를 이해하는데 시간이 오래걸린다. 알고리즘 설계도 물론 중요하지만 다양한 문제들을 풀어보며 문제를 이해하는 과정을 학습하는게 중요할 것 같다.


배열이 주어진 후 74를 찾는 순차탐색 알고리즘을 구현해보자.
arr에 배열을 저장하고 찾을 값 n을 입력한다.
배열을 sort()로 정렬해준다.
배열의 길이를 하나씩 읽어들인 후 n과 값이 같다면 "있다"를 출력한뒤 종료한다.
만약 값이 없다면 "없다"를 출력한다.
이번엔 이진탐색으로 알고리즘을 구해보자.
n에 찾는 값을 입력받고 arr에 배열을 저장한 뒤, sort()로 정렬해준다.
start노드 = 0, end노드는 배열의 길이 -1을 해줘서 뒤의 값부터 읽어오도록 저장한다.
시작노드부터 끝노드까지 반복문을 만들고
중간값 변수를 생성한뒤 (start + end) /2 를 해서 배열의 중간값을 구한다
중간값이 n이라면 있다를 출력하고 종료한다.
중간값이 n이 아니라면 중간값이 n보다 작을경우 start(첫노드)부터 하나씩 찾고
중간값이 n보다 클경우 end(마지막 노드)부터 하나씩 찾는다.
모든 배열을 찾은 뒤 n을 발견하지 못했을경우 반복문을 종료하고 "없다"를 출력한다.
최댓값찾기 문제

'알고리즘(이충기 교수)' 카테고리의 다른 글
알고리즘 3주차( 분할 정복) (0) | 2023.09.25 |
---|---|
알고리즘 2주차( 알고리즘의 효율성 분석) (0) | 2023.09.25 |
알고리즘 0주차(사전 평가시험) (0) | 2023.09.07 |