Weekly I Learned/2022's(7. ~ 12.) WIL

2022년 9월 1주차(9/5 ~ 9/9) Weekly I Learned "꾸준히만 하자!"

ikjo 2022. 9. 12. 04:29

지난 한 주 되돌아보기

벌써 9월이다. 🍂 작년에 위염으로 한동안 학습을 중단하고 다시 마음을 다잡고 학습을 시작했을 때가 9월 즈음이었는데, 시간이 정말 빠르다. 요즘에는 한 주 한 주 어떤 성과를 내겠다는 마음 보다도 '꾸준히'만 하자는 마음으로 꾸역꾸역(?) 학습을 하고있다.

 

정렬 알고리즘을 파헤쳐보다!

사실 자바 프로그래밍을 하면서 기본 정렬 API(Collections 클래스의 sort 메서드, Arrays 클래스의 sort 메서드)로 컬렉션이나 배열을 정렬해왔었기에 버블 정렬, 선택 정렬, 삽입 정렬 등 정렬의 원리나 구현에 대해 학습해야 할 필요성을 느끼지 못했었는데, 간혹 면접 때 이와 관련한 질문이 나온다는 얘기를 듣고 이에 대해 정리해보고싶다는 생각이 들었다.

 

어떻게 보면 반강제적(?)인 상황으로 학습하게 된거긴 하지만 이번에 정렬 알고리즘에 대해 학습해보면서 나름 유익했다고 느꼈다. 뭔가 당연하게 사용하고 있었던 정렬 API들이 어떠한 변천사(?)를 거쳐 완성되었다는 것을 생각해볼 수 있었고 각 정렬 알고리즘의 원리 및 특성 학습과 구현 과정을 통해 사고력 향상에 많은 도움이 되었던 것 같다.

 

 

[정렬 연습] 버블 정렬과 선택 정렬의 원리 및 구현 - Java

버블 정렬이란? 버블 정렬은 정렬 알고리즘 중에서 가장 원시적인 방법으로서 주어진 데이터들을 순회하면서 서로 붙어있는 2개의 데이터씩 비교해, 하나씩 맨 뒤에 차곡차곡 옮겨놓는 방식으

ikjo.tistory.com

 

 

[정렬 연습] 삽입 정렬의 원리 및 구현 - Java

삽입 정렬이란? 삽입 정렬은 주어진 데이터들을 순회하면서 특정 데이터를 적절한 위치에 삽입하는 방식으로 정렬한다. 이때 마법의 단어 '적절한'이 들어갔는데, 이 단어가 이전에 다루었던

ikjo.tistory.com

 

 

[정렬 연습] 퀵 정렬의 원리 및 구현 - Java

퀵 정렬이란? 퀵 정렬은 주어진 데이터 상 특정 값(피벗)을 기준으로 작은 값들은 왼쪽에, 큰 값들은 오른쪽에 옮겨 2개의 파티션(Partition)으로 분할(Divide)해 나가는 방식으로 정렬한다. 퀵 정렬

ikjo.tistory.com

 

 

[정렬 연습] 병합 정렬의 원리 및 구현 - Java

병합 정렬이란? 병합 정렬은 퀵 정렬과 마찬가지로 분할 정복 알고리즘으로서 주어진 데이터를 두 개의 균등한 크기로 분할하고 분할된 영역을 정렬한 후 병합해 나가는 방식으로 정렬한다. 이

ikjo.tistory.com

 

이전에 어려웠던 알고리즘 문제 다시 풀어보기!

알고리즘 문제를 풀다보면, 어떤 문제는 접근 방법이 금방 떠오르고 쉽게 푸는 문제가 있는 반면, 어떤 문제는 오랜 시간 고민해도 접근 방법 조차도 떠올리기 힘들었던 문제들도 많았다. 이런 문제들 같은 경우에는 결국 다른 사람들의 풀이를 참고하게 되는데, 그 순간에는 "아~ 이렇게 푸는거네"하고 넘어갔지만, 나 스스로 풀이하지 못했기 때문에 완벽하게 이해되지 않은 채로 지나가게 되는 경우가 많았다.

 

때문에 이전에 다른 사람들의 풀이를 참고하여 풀었던 문제들에 다시 재도전하는 시간을 가졌다. 아울러 이전에 풀었던 문제들 중 당시 너무 비효율적으로 풀었다고 생각한 문제들에 대해서도 다시 문제를 풀어보고 리팩토링하기도 했다.

 

 

[백준 - 1011] Fly me to the Alpha Centauri - Java

문제 설명 1011번: Fly me to the Alpha Centauri 우현이는 어린 시절, 지구 외의 다른 행성에서도 인류들이 살아갈 수 있는 미래가 오리라 믿었다. 그리고 그가 지구라는 세상에 발을 내려 놓은 지 23년이

ikjo.tistory.com

 

 

[백준 - 1052] 물병 - Java

문제 설명 1052번: 물병 지민이는 N개의 물병을 가지고 있다. 각 물병에는 물을 무한대로 부을 수 있다. 처음에 모든 물병에는 물이 1리터씩 들어있다. 지민이는 이 물병을 또 다른 장소로 옮기려

ikjo.tistory.com

 

 

자바의 인터페이스를 파헤쳐보다!

자바 스터디 8주차 과제의 주제는 '인터페이스'였다. 아직 자바 프로그래밍 경험이 부족한 탓에 추상 클래스를 통해 다형성을 구현한 경험은 있었으나, 인터페이스를 통해 다형성을 구현한 경험은 없었던 것 같다. 그랬었기에 뭔가 개념적으로는 인터페이스에 대해 얼추 알고는 있었지만, 경험에서 우러나오는(?) 지식이 없었기에 이번에 스터디를 통해 학습하면서 인터페이스에 대해 정말 많이 배울 수 있었다.

 

 

Java의 인터페이스에 대한 고찰

실생활에서의 인터페이스 인터페이스란 무엇일까? 인터페이스는 객체(사람, 사물 등)간 상호작용하기 위한 행동(action)이라고 할 수 있다. 예를 들어, 어떤 고객이 식당에서 특정 메뉴를 주문한

ikjo.tistory.com

 

(번외) 영화 '이미테이션 게임'을 재밌게 보다!

우연히 '앨런 튜링'이라는 영국의 컴퓨터 과학자(수학자, 암호학자, 철학자 등 겸직)에 대해 알게 되어 관심을 갖던 중 이와 함께 '이미테이션 게임'이라는 영화에 대해 알게되었다. 이 영화는 앨런 튜링이 2차 세계대전에서 독일군의 암호 '에그니마'를 해독하는 과정을 다루는 영화로서, 앨런 튜링의 천재성과 함께 앨런 튜링의 고달픈 삶(?)을 다루는 내용이었다.

 

당시에는 운영체제는 커녕 최초의 컴퓨터라고 불리우는(공식적인 최초는 아니다) '에니악'이라는 컴퓨터가 나오기도 이전의 상황이었는데, 앨런 튜링은 암호 해독을 위해 지금은 콜로서스라고 불리우는(영화에서는 '크리스토퍼'라고 불린다.) 컴퓨터를 고안하고 동료들과 함께 암호 해독을 위한 사투가 벌어진다. (말로만 듣던 진공관으로 구성된 컴퓨터가 영화에 주연급으로 등장한다.)

 

예상했듯이 '앨런 튜링'은 말 그대로 천재였다. 영화에서는 다소 공감 능력(?)이 떨어지는듯 보이긴 했지만, 일반인들은 상상조차 하기 힘든 문제들을 해결해나간다. 1966년부터는 그의 이름을 따 컴퓨터 과학 분야의 노벨상으로 불리는 튜링상을 매년 컴퓨터과학(전산학) 분야에 업적을 남긴 사람에게 시상한다고 한다. 나에게 익숙한 이름의 수상자로는 에츠허르 데이크스트라(다익스트라 알고리즘 등), 팀 버너스리(WWW) 등이 있었다.

 

아무쪼록 영화를 보는 내내 앨런 튜링의 천재성과 활약에 감탄하면서 보다가 결말에 앨런 튜링의 비극적(?)인 운명에 다소 안타까운 마음이 들었다. 🤣 이 영화는 사실을 기반으로 한 영화라는데, 앨런 튜링이 좀 더 오랜 시간 컴퓨터과학 연구에 몰두할 수 있었다면 지금의 IT 산업이 어떻게 바뀌어 있을까하는 생각도 든다.

 

가끔 이런 IT 관련된 영화를 보는 것도 나름 학습하는데 활력을 불어넣어주는 것 같다. 👍