관리 메뉴

Fintecuriosity

[기초 알고리즘과 파이썬 코딩] 알고리즘 문제해결 (problem solving) 본문

Computer Science/자료구조

[기초 알고리즘과 파이썬 코딩] 알고리즘 문제해결 (problem solving)

DataHolic26 2020. 4. 30. 23:55

먼저 본 포스트는 SK Planet의 T-academy의 온라인 강의 [기초 알고리즘과 파이썬 코딩]의 내용을 참조하여

제가 이해한 정보와 지식을 위주로 쓰여졌습니다.

 

참조: 위의 "[기초 알고리즘과 파이썬 코딩]" 의 하이퍼링크를 누르시면 본 강의 페이지로 redirecting 됩니다.

 

 

저는 비전공자이지만 IT 기업으로 취직할 기회를 얻게 되어 개발,코딩을 처음 접하게 되었습니다. 하지만 코딩을 처음 배우면서도 느낀 것은 주입식 교육이였습니다. 항상 이 코드는 왜 이렇게 구현해야 하는가? 에 대하여 많은 고민을 했지만 솔직하게 말하자면 현실과 타협하고 구글링을 통하여서 검색을 했기에 깊게 공부를 한 것이 아니라고 할 수 있습니다.

 

그러면 본론으로 넘어가서 "왜 알고리즘이 중요한가"에 대해서 한 번쯤 다 생각을 해보셨나요? 

 

알고리즘을 말 그대로 문제를 해결을 하기 위해 필요합니다. 더 자세하게 네이버에서 알고리즘의 정의에 대하여 검색을 한 결과입니다.

 

[알고리즘]

 

1) 어떤 문제를 해결하기 위한 절차, 방법, 명령어들의 집합.

 

2) 알고리즘은 프로그래밍 언어를 사용해 하나의 작업을 수행하는 방법에 대한 서술로, 논리 요소와 통제 요소로 구성된다. 

 

위의 정의를 읽으면 어쨋든 쉽게 한 문장으로 표현하면 "프로그래밍 언어로 문제를 해결하는 과정"이라고 할 수 있습니다.

 


전체적인 overview를 보면서 알고리즘을 정의하고 왜 하는지에 대하여 간략하게 알아보았습니다.

이제 진짜 본격적으로 강의에서 배운 내용을 리뷰 해보도록 하겠습니다!!

 

 

본 강의[기초 알고리즘과 파이썬 코딩]를 진행하시는 강사 안수빈님 현재 고려대학교 사이버국방학과에서 재학 중이시고 평소에 알고리즘을 즐겨 푸셨다고 합니다. 또한 위의 사진을 보면서 하신 말씀은 알고리즘은 꾸준하게 많이 연습하고 어떻게 문제를 푸는지 사고하는 방법이 중요하다고 했습니다.

 

5000개 넘는 알고리즘 문제를 푸셨다고 하는데..... 이 말을 들으면 평균 2000개는 넘게 풀어야 산꼭대기(정상)에 오르는 경지가 되겠군요. 알고리즘 문제를 외워서 코딩 테스트는 통과할 수 있다고 하셨는데, 그 보다 알고리즘을 이해하고 활용하는 것이 본질이라고 하셨는데 참 이 말이 계속 와닿았습니다.

 


 

 

보통 프로그래밍 문제를 풀때는 프로그래밍 언어를 사용하여 제한된 (주어진) 시간과 메모리 조건 안에서 문제를 해결해야 한다고 강의에서 말씀하셨습니다. 아무래도 메모리 접근이 용이한 C++로 작성하면 시간이 적게 걸리지 않을까 라는 저의 개인적인 견해로 보았을 때 제일 실행이 빠른 언어(?)라고 뇌피셜을 내보았습니다. 모바일 기기를 기준으로 한다면 라즈베리 파이에 작동해야 하고, client 환경에 따라 메모리를 고려하는 알고리즘을 만든다고 하였습니다. 

 

강의에서 문제 해결을 하는데 제일 중요한 요소는 위와 같이 4가지를 뽑았습니다. 

1) 구현능력

2) 효율

3) 절차적 사고

4) 디버깅


 

문제해결을 하기 위한 4가지 요소의 자세한 설명은 위의 사진과 같습니다.

 

그리고 알고리즘 문제를 푸는데 있어서 문제해결이 제일 중요하고 또한 이 4가지 사고 중 자신이 가장 부족한 것이 무엇인지 파악하는 것도 매우 중요하다고 생각합니다.

 

1) 구현능력이라고 하면 대부분의 코딩문제를 구현할 수 있어야 합니다.

 

- 자신 생각을 프로그래밍 언어로 구현하여 문제를 해결할 수 있는가?

- 적어도 500문제 이상은 풀어야 문제해결하는데 여러가지 solution(해결)을 터득할 수 있다.

- 문제 은행 방식으로 계속 적금 쌓듯이(?) 푸는 것도 나쁘지 않다. (제 의견)

- 언제 어떤 변수를 선언해야 하는지 구현단계에서 매우 중요하다.

 

2) 효율

- 함수를 template화 (즉 자주쓰는 함수를 틀로 만들어서 자신의 customized(개인화)틀을 사용하자)

- 다른 사람의 풀이를 참조하여 (효율성 측면에서 좋은 코드는 보고 배우고, 자기 코드를 효율적으로 만들자)

 

3) 절차적 사고 

- 어떤 알고리즘을 선택해야 하는가?

- 어떤 알고리즘으로 어떤 문제를 풀어야 하는가?

 

4) 디버깅

- 문제를 풀더라도 꼭 하나씩은 틀릴 확률이 있다.(즉 케이스별로 문제 틀리는 것이 다르다.)

- 예외 탐색(입력이 0~100이면 조건을 최소, 최대로 다 넣어본다)

- 에러 메세지가 모두 다 다르다. (그러니 에러 메세지를 잘 이해하는 것도 매우 중요하다.)

 

 

긴 글 읽어주셔서 감사합니다.


 

알기 쉬운 내용이였고 아는 내용도 있었지만 다시 들으니 머리 속에서 깔끔하게 정리가 되었습니다.

 

- 이상으로 배운 내용들을 모두 정리하였습니다. 강의가 궁금하시다면 아래의 링크를 참조해주세요!

 

 

 

Reference: https://tacademy.skplanet.com/live/player/onlineLectureDetail.action?seq=175

 

기초 알고리즘과 파이썬 코딩 | T아카데미 온라인강의

1. 자료구조와 알고리즘의 기본 개념에 대해 알아보고, 알고리즘 문제해결을 위한 접근방법에 대해 알아봅니다. 2. 기초 알고리즘 예제 문제를 파이썬으로 프로그래밍 해보도록 합니..

tacademy.skplanet.com

 

'Computer Science > 자료구조' 카테고리의 다른 글

[자료구조] 자료구조 기초 2  (0) 2020.07.08
[자료구조] 자료구조 기초  (0) 2020.06.14