brunch

You can make anything
by writing

C.S.Lewis

by Younggi Seo Jun 06. 2022

나무를 살펴야 숲이 보일 때

삽입 정렬 알고리즘의 For 루프문 버전






코딩은 정말 끈덕지게 붙어있어야 한다. 정확하게 말하면 코딩은 자신의 생각에 몰입하는 습관이 이루어져야 스스로 생각의 순서(코드 사고의 체계)를 살필 수가 있다. 그런데 알파벳 나부랭탱이를 보고 소스를 뚫어지게 쳐다보는 게 중요한 게 아니라, 이 소스를 구현할 때 어떠한 논리를 세웠는지 우리 나라말로 적은 것을 뚜렷하게 이해하고 있는지가 중요하다는 것을 깨달았다.


영어로 치면 그 문장의 구조나 단어 낱개의 뜻보다 의미하는 바가 뭔지 정확하게 알고 있느냐이다. 코딩이나 영어나 둘 다 표현방법이 영어로 되어 있어서 그런지 몰라도, 그 근저에 깔린 의미에 대한 이해는 한국어로도 이해 못하면 아무런 의미가 없다. 즉, ‘문해력’ 것이다. 말뜻을 확실히 이해한 뒤에야 영어로든, 코드로든 다른 나라말로 혹은 컴퓨터가 알아먹게끔 표현할 수가 있는 것이다.


그래서 코딩도 영어도 수학도 사실은 한국말을 잘 알아먹는 문해력이 있어야 다음 단계로 넘어갈 수가 있다.



클라우드 보안 엔지니어로 이직이 성사된 후, 보름 정도의 여유를 남기고 무엇을 대비할까 많이 고민했다. 제주도나 가까운 아시아 국가에 콧바람이나 새고 올까도 했지만, 무엇보다 현업에서 주력으로 사용하는 클라우드 플랫폼에 대한 교육 강좌를 일주일 간의 무료 티어를 통해 알아먹는 게 맞는 것 같았다. 왜냐하면 리프레쉬는 열심히 일한 뒤에 보상으로 남겨두는 게 여러모로 우선순위에 맞다고 생각했기 때문이다.



어쨌든 CloudGuru 사이트의 자격증 인증 과정을 듣고, 일단 지금까지 해오던 기본 알고리즘의 파이썬에서의 구현도 마무리하기로 했다. 그 가운데, 저번 섹션에서 마무리한 것처럼 보인 '삽입 정렬' 알고리즘을 큰 테두리에서는 각 함수의 용도가 뚜렷이 보였으나, Insertion_sort 함수를 for 루프 버전으로 바꾸기까지 필요한 디테일은 다시 한번 나무를 살필 필요가 있어서 개인적인 학습 차원에서 리뷰했다.


for 루프 버전 코딩 1단계

https://github.com/DanielNoah/ControlStructure/blob/960ffb0419610f315b2a793f79eb76cf1a99aa02/insertionSort_recall_0529.py



위의 for 루프에서 시퀀스(리스트의 일종)에 해당하는 xs와 for 루프의 특정 변수 x가 어떻게 바뀌었는지 보면,


for 루프 버전 코딩 2단계

https://github.com/DanielNoah/ControlStructure/blob/38b6b5619f714f8920b78f5dbbf601e6102bc38f/insertionSort_recall_0605.py



기존의 if xs != []  명령이 반복문의 변수 x 시퀀스 xs [0]  때부터 xs [len(xs)-1] 때까지 반복하는 것으로 대치된다.  변수 x xs[] 리스트의 모든 범위를 한번   반복하므로 xs 비워있는 여부를 확인하는 조건 제어, xs != [] 없어도 된다.


여기서 디버깅하면서 x로 선택되는 원소가 선두 원소가 아니라, 후미 원소라는 게 이전의 함수 버전과는 차이가 있다. 하지만, x가 후미 원소로 선택되더라도 어차피 insert 함수를 통해서 선두 원소는 가장 앞으로 appending 되므로 최종 결과로 리턴되는 ss의 값은 순차적으로 정렬된다.




매거진의 이전글 전체가 한눈에 보일 때
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari