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

2022년 8월 4주차(8/22 ~ 8/26) Weekly I Learned "Java와 알고리즘 기초 탄탄하게 학습하기"

ikjo 2022. 8. 29. 21:32

지난 한 주 되돌아보기

벌써 8월 4주차도 모두 지나갔다. 이번 한 주 역시 프로그래밍 언어 Java와 알고리즘에 대해 깊이있게 학습하는 시간들을 가졌다. 당장의 취업도 중요하지만, 이러한 기초 학습이 좀 더 중요하다고 생각했다. 아울러 학습을 하면서도 부족한 점을 많이 느꼈고 기초 학습의 필요성을 더더욱 느낄 수 있었다.

 

또한 학습과 별개로 IT 콘텐츠(다큐멘터리 '알파고') 리뷰 글도 작성해보았다. 리뷰 글은 처음 작성해보는데, 나름대로 작성하는 과정에서 많은 인사이트를 얻을 수 있어 유익했고, 다음에도 이런 유사한 IT 산업 관련 다큐멘터리를 보고 다양한 관점으로 바라보는 사례들을 정리해보고 싶다는 생각이 들었다.

 

나의 첫 번째 IT 콘텐츠 리뷰, 다큐멘터리 '알파고'

처음으로 IT 콘텐츠에 대한 리뷰 글을 작성해보았다. 해당 IT 콘텐츠는 다큐멘터리 '알파고'로서 내가 학부생 시절부터 알고있었던 인공지능 알파고 vs 프로 바둑 기사 이세돌 간 펼쳐진 세기의 바둑 대국에 관한 내용을 다룬 다큐멘터리이다. 우연히 유튜브 '딥마인드' 채널에 해당 다큐멘터리가 공개되어있다는 것을 알게 되어 보게 되었고, 굉장히 인상깊었고 유익했었기에 '리뷰' 겸 생각 정리 차원에서 글을 작성해보았다.

 

 

다큐멘터리 '알파고' 그리고 인공 지능에 대한 생각들

알파고 vs 이세돌 2016년 3월 9일 오후 경, 대학생 3학년이었던 나는 "마이크로 컨트롤러"라는 전공 필수 강의를 들으며 Atmega128라는 마이크로 컨트롤러 유닛의 이론을 배우고 있는 중이었다. 수업

ikjo.tistory.com

 

글을 작성하는 과정에서 인공 지능에 대해 많은 생각을 해볼 수 있었다. 특히, 이 인공 지능 기술을 기반으로한 앞으로의 기술에 대해 논하는 많은 이야기가 있었는데, 흥미로우면서도 이러한 시기에 앞으로 개발자로서 어떻게 성장해나가야할지도 생각해볼 수 있었다.

 

마침내 프로그래머스 레벨 2 모든 알고리즘 문제를 클리어하다!

예전에 학습했었던 기록을 살펴보니 내가 처음으로 자바로 알고리즘 문제를 풀이했을 때가 2021년 11월 8일이었고, 2~3주 정도 코드업 문제를 위주로 풀었다가, 11월 25일부터 프로그래머스 레벨 1 알고리즘 문제를 풀기 시작했다. 개인적으로는 레벨 1 알고리즘 문제들은 큰 어려움 없이 풀 수 있었던 것 같다.

 

하지만 당시 레벨 2부터는 무언가의 '벽'이 느껴지기 시작했다..😂 그렇게 레벨 2의 경우 10문제 남짓 풀었다가, 2022 코드스쿼드 마스터즈 코스 과정 준비와 함께 서서히 나의 손을 떠나게 되었는데, 마스터즈 코스 과정에서 운이 좋게도 '알고리즘 스터디'에 합류하게 되어 과정 중에도 스터디원들과 함께 알고리즘 기초 공부를 하면서 백준과 프로그래머스(레벨 2) 등의 여러 알고리즘 문제들을 풀이할 수 있었다.

 

비록 과정 중에는 미션 과제를 구현하기 급급했었지만, 그래도 일주일에 알고리즘 문제를 2문제씩 꾸역꾸역 풀어나갔다. 특히, 스터디원들이 돌아가면서 문제를 출제하는데, 이 덕분에 다양한 알고리즘 기법들을 배우고 체득할 수 있었다. 이렇게 스터디로 다양한 문제들을 접하고나니, 내가 작년도 12월 즈음 프로그래머스 레벨 2 알고리즘 문제를 풀면서 느꼈었던 무언가의 '벽'이 이제는 좀 허물어진듯한 느낌이었다.

 

그렇게 마스터즈 코스를 수료한지 2개월 정도된 지금 이 시점, 마침내 프로그래머스 레벨 2 알고리즘 문제(총 77문제)를 모두 풀이할 수 있게 됐다. 😂

 

 

하지만 내가 레벨 2의 모든 문제를 능수능란하게 풀었던 것은 아니었기에, 복습과 최적화 노력이 많이 필요하다고 생각한다. 특히, 실제 코딩테스트의 경우 제한된 시간 내에 문제를 풀어야하기 때문에 더욱 많은 연습과 노력이 필요하다고 느껴진다.

 

프로그래머스 모의 코딩테스트 1회차 응시

앞서 프로그래머스 레벨 2 알고리즘 문제를 푸는 것과 별개로 8월 23일까지 공개되는 프로그래머스 모의 코딩테스트 1회차에 응시해봤다. 해당 테스트는 총 4문제의 알고리즘 문제로 주어진 시간은 3시간이었다. 

 

1 ~ 3문제의 경우 레벨 2 정도로 체감되는 알고리즘 문제로 푸는데 큰 어려움은 못 느꼈다. 하지만 마지막 문제의 경우 체감상 왠지 레벨 3정도는 되지 않을까하는 문제였는데, 제한 시간내 풀 수는 없었다. 

 

 

다음과 같이 초기 바둑판 상태(왼쪽)와 목표 바둑판 상태(오른쪽)이 주어졌을 때, 최소 몇 번 동전(가로 or 세로)을 뒤집어야 초기에서 목표 상태가 될 수 있는지를 구하는 것이었다.

 

해당 문제는 백트래킹을 통해서 해결할 수 있었는데, 탐색 기반을 설계하는데 너무 오랜 시간이 걸렸다. 그래도 해당 모의 테스트 덕에 백트래킹을 좀 더 이해할 수 있어 유익했다.

 

자바의 상속, final 키워드, Object 클래스를 파헤쳐보다!

자바 스터디 6주차 과제로는 '상속'이라는 주제로 super 및 final 키워드, 메서드 오버라이딩, 다이나믹 메서드 디스패치, Object 클래스 등에 대해 학습해볼 수 있었다.

 

특히, Object 클래스를 학습할 때는 자바에서 제공하는 여러 클래스들의 구현된 코드들을 살펴보면서, "아 이렇게 구현됐었던거구나"하는 나름대로의 인사이트를 얻을 수 있어 유익했다. 또한 Object 클래스가 제공하는 각각의 기능(메서드)을 이해하는 과정에서 파생되는 여러 지식들을 습득할 수도 있었다.

 

매주 자바 스터디 과제를 할 때마다 느끼는 거지만, 마스터즈 코스 과정에서 자바 프로그래밍을 했었던 경험이 자바를 학습하는데 정말 많은 도움이 되고있다. 만일 마스터즈 코스 과정 이전에 이 내용들에 대해 학습했었으면, 깊이있게 학습하지 못하고 나의 것으로 체득되기도 힘들었을 것 같다.

 

 

Java의 상속에 대해 파헤져보자!

상속이란? 자바에서 상속이란 기존의 클래스(상위 클래스)를 '재사용 및 확장'한 새로운 클래스(하위 클래스)를 작성하는 것이다. 여기서 '재사용'이라는 표현을 사용했는데, 이는 상위 클래스의

ikjo.tistory.com

 

Java final 키워드의 여러가지 쓰임새

final 키워드란? final이란 '마지막'이라는 뜻을 가지고 있는데, 실제 자바에서 쓰임새도 이 의미와 유사하게 사용된다. 이때 final 키워드가 사용될 수 있는 대상은 '클래스', '메서드', '변수' 세가지

ikjo.tistory.com

 

Java의 Object 클래스가 제공하는 기능 분석

Object 클래스란? 객체지향 프로그래밍 언어인 자바에서 모든 코드는 반드시 클래스 안에서 존재하며, 이러한 클래스는 서로 관련된 속성과 기능 간의 그룹으로 묶이게 된다. 이때 Object 클래스는

ikjo.tistory.com