본문 바로가기

IT

컴퓨팅을 통한 문제 해결

사람이 아닌 컴퓨터를 통해 사람이 해결하지 못하는 많은 문제를 해결할 수 있습니다.

이렇게 컴퓨팅을 통해 작업을 하기 위해서는 일련의 해결 과정이 있습니다.

 

1) 문제의 이해, 2) 추상화, 3) 알고리즘 설계, 4) 프로그래밍 의 순서로 사람이 컴퓨터에게 문제 해결을 위한 행동을 취하게 하는 과정을 컴퓨팅을 통한 문제 해결 과정이라고 부릅니다.

 

 

 

 

1) 문제의 이해

컴퓨팅 시스템에서는 문제를 이해하는 것이 컴퓨팅을 활용하여 문제를 해결하기 위한 출발점입니다.

같은 업무가 반복되는 작업, 시간이 오래 걸리는 작업은 컴퓨팅 시스템을 이용하면 보다 빠르게 처리될 수 있어 업무 처리 효율성을 증대시킬 수 있습니다.

 

문제라는 것은 해결하기 어렵거나 난처한 대상 또는 그런 상황을 의미하는 것으로 해결이 필요한 모든 대상이라 정의할 수 있습니다. 

예를 들어, 회사에 지각하지 않는 방법을 찾는 일, 키에 맞는 체중을 달성하는 일, 여행을 가려는데 어떤 교통편을 선택해야 하는지 등 일상생활에서 해결해야 하는 일들을 문제라고 할 수 있습니다.

 

컴퓨팅처리

 

문제 상황은 현재 상태목표 상태 사이에 차이가 발생하여 해결이 요구되는 상황입니다.

문제를 해결하는 방법에는 한 가지가 아니라 여러 가지 방법이 존재할 수도 있고, 어떤 경우는 해결하지 못하거나

실제 답이 존재하지 않거나, 계산이 불가능한 문제도 있을 수 있습니다.

2) 추상화

추상화는 사물을 이해하고 처리하기 쉽게 단순화시키는 작업을 말합니다.

사물과 관련된 상세한 내용을 숨기거나 생략하고 핵심 요소만 뽑아냄으로써 문제 해결에 필요한 필수 요소를 단순하게 만드는 과정입니다.

추상화는 문제의 현재 상태와 목표 상태를 파악한 후에 목표 상태를 달성하기 위해 문제를 단순화하고 구조화하는 과정입니다.

추상화 과정에는 문제 분석, 핵심 요소 추출, 문제 분해, 모델링이 존재합니다.

2-1)  문제 분석

목표 상태에 도달하기 위한 해결 방안을 찾아 적용하면 현재의 문제 상태는 목표 상태로 변하거나 목표 상태에 도달하게 되어 문제가 해결됩니다. 

1단계에서 문제를 이해했다면 이제 문제에 대한 분석이 필요한 단계입니다.

문제 분석은 문제 해결 방안의 효율성이나 적절성에 영향을 주게 됩니다.

문제를 효율적으로 해결하기 위해서는 문제를 정확하게 이해하고 분석하는 과정이 필요합니다.

문제 분석을 위해서는 문제 상황에서 발생하는 가능한 다양한 자료의 수집과 분석이 필요합니다.

자료의 수집과 분석 결과로 문제 해결 방향을 결정할 수 있고, 컴퓨팅 시스템을 통해 해결할 수 있는 문제로 정의할 수 있습니다.

2-2) 핵심 요소 추출

어떤 사물이나 사람을 표현할 때 자세히 표현하지 않아도 대상을 쉽게 이해시킬 수 있는 특징적인 요소가 있습니다.

코끼리의 코, 칙칙폭폭 기차 소리와 같이 특징적인 형태나 소리로 사물과 감정을 표현할 수 있습니다.

이러한 중요한 요소가 바로 핵심 요소입니다.

핵심 요소 추출을 문제를 쉽게 이해하기 위해 불필요한 요소를 제거하고 필요한 부분만을 추출하여 문제를 단순화시키는 것입니다.

 

 

 

2-3) 문제 분해

문제를 쉽게 해결하기 위해서는 문제를 더 작은 단위의 문제로 분해하는 것이 필요합니다.

큰 문제를 작은 부분으로 나눈 후에 작은 문제들을 해결하면 문제를 빠르고 효율적으로 해결할 수 있습니다.

 

2-4 ) 모델링

모델링이란 복잡한 현실 세계의 현상을 단순화시켜 표현하는 것입니다.

모델링은 현상을 구성하는 중요한 특징인 핵심 요소를 추출해 문자, 수식, 그림, 모형 등의 다양한 형태로 추상화하는 과정입니다.

컴퓨팅 시스템에서 모델링은 문제를 인식하고 문제를 분석하거나 해결을 위해 자료를 수집하고 분석한 후, 

핵심 요소를 추출하고 구조화하여 문제 해결 모델을 만들 때 사용합니다.

 

3) 알고리즘

알고리즘이란 문제를 논리적으로 해결하기 위한 절차나 방법의 집합입니다.

문제를 해결하는 절차나 방법이기 때문에 명확하지 않거나, 실행하기 어렵다면 문제를 해결할 수 없기 때문에 알고리즘이 될 수 없습니다.

 

알고리즘으로 유효하기 위해서는 아래와 같이 5개 조건을 갖추어야 합니다.

  1. 외부에서 제공되는 0개 이상의 입력이 필요합니다.
  2. 적어도 한 가지 이상의 결과가 나와야 합니다.
  3. 각 명령이나 연산자들은 애매하지 않고 명확해야 합니다.
  4. 알고리즘의 명령대로 수행하고 난 후 반드시 종료되어야 합니다.
  5. 알고리즘의 모든 명령은 실행할 수 있어야 합니다.

알고리즘을 간결하고 명확하게 표현하기 위해 그림과 기호를 많이 사용하게 됩니다.

알고리즘을 표현하는 방법에는 자연어, 의사 코드, 순서도의 표현 방법이 존재합니다.

이 방식들은 프로그램 언어의 문법적 지식이 없어도 쉽게 사용할 수 있고 이해하기가 쉽다는 특징이 있습니다.

  • 자연어 : 일상생활에서 사용하는 말이나 언어를 이용한 표현법
  • 의사 코드 : 특정 프로그래밍 언어의 문법이 국한되지 않고 자연어로 프로그램 코드를 흉내 내어 표현
  • 순서도 : 정의된 기호와 도형을 이용하여 표현

알고리즘은 순차, 선택, 반복의 제어 구조를 사용하여 표현됩니다.

  • 순차 구조 : 문제 해결을 위해서 필요한 명령들이 정해진 순서대로 수행되는 구조
  • 선택 구조 : 주어진 조건을 비교, 판단하여 선택 결과에 따라 처리하는 과정을 다르게 하는 구조
  • 반복 구조 : 특정 조건을 만족할 때까지 같은 명령을 반복하여 실행하는 구조

선택과 반복 구조는 모두 작업의 실행 여부나 실행 횟수가 명시된 조건에 의해 수행됩니다.

반복 구조는 반복하는 조건의 검사 시점에 따라서 "검사 후 실행" 또는 "실행 후 검사"의 두 가지 형태로 구분됩니다. 

일반적으로 알고리즘의 기본 틀은 순차 구조이고 일부 단계에서 선택과 반복 구조 형태를 가지게 됩니다.

 

문제를 해결하는데 여러 개의 알고리즘이 존재한다면 가장 효율적인 알고리즘을 선택해야 합니다.

알고리즘 선택 시 고려사항은 다음과 같습니다.

  • 처리 효율이 높을 것 : 연산 적응 횟수가 적고 처리 속도가 빨라야 합니다.
  • 일반적일 것 : 특정 상황에서만 사용되는 알고리즘이 아니라, 다양한 상황에서 사용할 수 있어야 합니다.
  • 확장성이 있을 것 : 변경 사항을 간단하게 수정할 수 있어야 합니다.
  • 알기 쉬울 것 : 누가 봐도 알기 쉬워야 합니다. 이해하기 어려운 알고리즘은 프로그램 유지 보수에 방해가 됩니다.

 

 

 

문제 해결을 위한 알고리즘들을 평가하기 위해서는 시간공간에 대한 성능 평가가 필요합니다.

  • 시간
    • 알고리즘이 적은 시간을 사용한다는 것은 프로그램을 실행할 때 빠른 소도로 처리되는 것을 의미합니다.
    • 반복문의 중첩과 처리할 자료가 많아질수록 시간 복잡도의 영향은 더 커지게 됩니다.
    • 빅-오(Big-Oh) 표기법 :반복문이 수행되는 횟수로 측정
  • 공간
    • 알고리즘이 적은 공간을 사용한다는 것은 프로그램을 실행할 때 메모리 공간을 적게 사용한다는 것입니다.
    • 빅데이터와 같이 데이터 처리 양이 많은 경우에는 공간 복잡도에 따라 메모리 부족 현상이 발생할 수 있습니다.

4) 프로그래밍

프로그래밍은 문제의 해결책을 프로그래밍 언어로 구현하여 자동화하는 과정입니다.

프로그래밍 언어에는 텍스트 기반 언어와 블록 기반 언어가 있습니다.

  • 텍스트 기반 언어 : C, 자바(Java), 파이썬(Python).
    • 프로그래머가 텍스트 형태의 명령어를 작성하고 컴파일러 또는 인터프리터의 번역을 거친 후 실행됩니다.
  • 블록 기반 언어 : 스크래치 (Scratch), 엔트리(Entry)

통합 개발 환경(IDE)은 프로그램을 개발하는 과정에서 필요한 텍스트 편집기, 컴파일러, 디버거 등의 프로그램이 함께 제공되는 프로그램 개발 환경을 말합니다. 

통합 개발 환경을 통해 프로그램의 작성, 디버깅, 실행 테스트 등의 프로그래밍 전 과정을 진행할 수 있습니다.

 

 

 

 

 

 

 

'IT' 카테고리의 다른 글

유무선 네트워크  (0) 2022.10.27
파이선 문법 3 - 제어,배열,함수  (0) 2022.10.27
파이선 문법 2 - 입출력  (0) 2022.10.26
파이선 문법 1 - 변수와 자료형  (0) 2022.10.26
파이썬과 소스코드 편집기 설치  (0) 2022.10.25