
문제야 문제, 온 세상 속에
DEAN 'Instagram' 中
본 게시물은 대학교 학부 수업 및 참고 교재인 '이제 시작이야! 컴퓨팅 사고력으로 인공지능까지 파이썬 - 전수진, 박주연, 김수환 공저 / 연두에디션' 을 토대로 필자가 이해한 내용을 정리했습니다.
우리는 문제라고 하면 익숙하다. 대한민국 국민은 어떤 민족인가. 구몬의 민족, 수능의 민족 아닌가. 거의 문제가 나고 내가 문제인 물아일체의 경지에 이르렀을 것이다. 하지만 이제 시대가 바뀌고 있다. 어쩌면 계산기, 더 옛날로 올라가서 주판이 그 시작이지 않을까. 이를 시작으로 우리는 컴퓨터를 얻게 되면서 수학과 같은 수의 문제를 넘어 수많은 실생활, 전문적인 영역의 난제 까지도 필수적인 존재가 되어버렸다.
그렇다면 컴퓨터의 영역에서 문제란 무엇이고, 이를 해결하는 기본적인 방법 등을 알아보자.
이를 위해서 Computing thinking의 하위요소인 문제분해의 개념을 이해해야 한다.
컴퓨터는 우리와 사고방식이 다르다. 전에 언급했듯이 그들만의 언어가 따로 있으며 프로그래밍 언어를 배워 그들과 소통하기 위해 우리는 노력해야 한다. 정렬과 같은 컴퓨터 명령을 수행하기 위해서는 먼저 분해 단계를 거쳐야 한다. 우리는 글을 늘 읽어왔고 긴 글들을 읽으며 문맥을 파악하고 거기서 핵심을 찝어낼 수 있다. 하지만 컴퓨터는 다르다. 한 문장 한 문장 떠먹여 줘야 한다는 것이다.
그 전에, 문제란 무엇일까.
문제(Problem)란 해답을 요구하는 물음, 논쟁 또는 연구의 대상이 되는 것이라 볼 수 있다. 해결해야 하는 과제를 말하고 , 목표 상태와 현재 상태의 차이를 일컫는다. 이 차이를 해결하는 과정이 바로 문제해결이라 할 수 있다.
사회가 복잡해짐에 따라 문제도 복잡해지고 있다. 이를 해결하기 위해서는 컴퓨터를 활용해서 해결책의 효율성을 높여야 한다.
탐색 문제는 답을 향해 가는데 갈래길이 계속 나오면서 이를 어떻게 탐색을 할 것인가에 대한 문제이다. 최적화 문제는 어떤함수가 있을 때 그 함수의 값이 최소가 되는 값을 찾는 문제 같은 유형을 말한다.
이제 문제를 봤으면 해결해야 한다.
문제 해결 : 현재 상태에서 목표 상태로 도달하기 위한 인지적 처리 및 사고 활동의 과정.
이렇게 수학자인 Polya는 문제해결에 대한 과정을 이렇게 제시하였다.
문제를 발견을 했다고 바로 해결이 가능진 않을 것. 문제 해결을 하려면 먼제 문제를 이해해야 할 것이다. 그래서 첫 단계로 문제 이해 단계가 있어야한다.
- 문제 해결을위한 목적이 무엇인지, 문제를 해결하기 위해 필요한 조건이 무엇인지, 그 조건을 구하기 위한 방법이 무엇인지와 같이 조건과 정보에 대한 정확한 이해가 필요하다.
- 문제의 이해와 분석을 토대로 문제를 해결하기 위한 자료를 모으는 단계인 '자료 수집', 수집된 자료와 문제에 주어진 자료를 세심히 분류하고 분석하는 단계인 '자료 분석', 자료 내용을 그래프, 차트, 단어, 이미지 등으로 표현하는 단계인 '자료 표현' 과정이 필요하다.
해결을 하는 방법에는 위처럼 여러가지가 있다. 그 중 병렬처리는 분석과 합성과 조금 다르다. 문제를 해결하면서 문제가 나눠져 있을 때 동시에 해결 가능한 문제가 있다. 그것들을 동시에 해결하는 것이 병렬처리이다.
병렬처리를 하면서 한 문제가 나뉜다고 했다. 이처럼 병렬처리를 통해 효율적으로 문제를 해결하려면 문제를 쪼개면 더 쉽게 해결할 수 있다는 것. 그렇다면 문제분해에 대해 알아보자.
문제 분해라고 함은, 즉 분해를 하여 해결하는건 컴퓨터 분야가 처음이 아니다. 이 역사는 꽤 오래됐다.
분해(Decomposition)
- 복잡한 문제를 해결 가능한 크기의 작은 문제들로 나누어 해결하는 방법.
- 분해는 수학에서 오래전부터 많이 사용해 왔고, 이제는 Computational thinking 영역에서도 사용된다.
각각의 문제를 해결했다는 것을 정복이라고도 표현한다. 위의 모식화한 그림과 같은 방법을 분할정복 알고리즘이라고 한다. 순차적이고 절차적인 문제들이 복잡하게 얽혀서 나타날 때, 문제 분해를 통해서 구조화하고 각각의 부분 문제들을 해결한다면 복잡하고 큰 문제들도 효율적으로 해결할 수 있게 된다.
컴퓨터에서는 탐색이 많이 이용된다. 정렬, 탐색 이 두 가지가 있다.
정렬은 데이터를 순서대로 나열하는 것을 말한다. 위 그림 또한 정렬이 되어 있다. 원하는 값을 찾는 것을 탐색이라 한다. 컴퓨터 안에서는 시간을 줄이는 것이 중요하다. 컴퓨팅을 하면서 정렬, 탐색은 꽤 자주 접하게 되는 과정이기 때문이다. 전체데이터양은 매우 방대해졌다. 그래서 그 데이터를 쪼개서 어느 쪽에 있는지, 없은 영역은 버리고 있는 영역에서 탐색을 하였더니 더 속도가 빨라졌다는 것. 이를 방법으로 차용한 것이 이진탐색이다.
'COMPUTER SCIENCE > Computational thinking' 카테고리의 다른 글
컴퓨터의 성장 스토리.. 들어보실래요? (5) | 2024.06.17 |
---|---|
조회수, 알고리즘의 은총 (0) | 2024.06.17 |
프로그래밍, 너 T발 C야? (0) | 2024.06.16 |
뻔하다 뻔해!! 다 보인다고 (1) | 2024.06.16 |
컴퓨터를 배우기 위한 마인드셋(Mindset) (0) | 2024.03.21 |
나의 성장 드라마
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!