개요

 

알고리즘이란

프로그램은 자료 구조와 알고리즘으로 구성되어 있다.
문제를 해결하는 방법 및 과정으로, 논리이며 수학이고 실질적인 개발에 적용되는 기초적인 아이디어이다.
수학적인 분석(특히 점근적 분석법, 행렬 등)을 통해 좋고 나쁨을 평가할 수 있다.

실제 프로그램을 개발할 때 효율적인 알고리즘을 적용함으로써 원하는 결과를 도출해야 한다.

스케줄 관리 프로그램 : 달력에서 특정한 달에 해당하는 일수는 어떻게 구할까?
내비게이션 프로그램 : 여러 개의 중간 지점을 거쳐서 특정 지점으로 갈 때 가장 빠른 길은?
게시판 프로그램 : 한 페이지당 게시글을 어떻게 10개씩 출력할까?

공부법

  1. 기초 프로그래밍과 자료구조 공부 후
  2. 공부는 꾸준히
  3. 하나의 문제에 대해 다양하고 깊이 생각해보기
  4. 문제를 못 풀었을 때, 답을 보고 내 답과 비교하기
    (1) 왜 안되는지, 답과 무엇이 다른지 오답노트
    (2) 절대 답을 보고 외우지 않는다.

조건

  • 입력 (input)
    외부에서 제공되는 자료가 0개 이상 존재 (없을 수 있다)
  • 출력 (output)
    문제가 처리되면 결과가 최소 1개 이상 존재
  • 유한성
    유한한 수의 작업 후에는 반드시 유한 시간 내 종료해야 함
  • 명확성
    각 단계가 무엇을 위한 것인지 명확한 명령어로 구성되어야 함
  • 효과성
    모든 명령은 실행 가능한 형태여야 함

유의할 내용

알고리즘 문제를 풀 때 신경쓰려고 노력하는 부분이 있다.
정리를 해두지 않으니 잊어버리는 것 같아 간단하게 정리해보았다.

  1. 문제의 조건을 잘 읽자
    문제를 푸는 방법은 문제 안에 있다.
    하나의 힌트도 놓치지 않고 꼼꼼히 읽고 따져 푸는 습관을 들이자.
    
  2. 출력해야 할 결과값과 포맷을 잘 보자
    값이 제대로 나와도 포맷이 잘못되면 틀린 답이다.
    포맷이 제대로 나와도 값이 잘못되면 틀린 답이다.
    문제를 제대로 풀기 위해서는 둘 다 올바른 값이 나와야 한다.
    
  3. 경계값에 대해 테스트 케이스 추가
    테스트는 주어지는 값만 테스트하면 안된다.
    잘못된 값이 나오기 쉬운 경계값에 대한 테스트를 올바르게 수행해야 한다.
    underflow, overflow, 그 외에도 값이 잘못 나올 수 있는 경우를 모두 생각해서 테스트해보자.
    모든 경우의 수에 대처하지 못하고 뻑나는 코드는 좋은 코드가 아니다.