지난 주에 자료구조/알고리즘 공부를 위한 스터디 그룹을 형성하여 시작했지만 본격적으로 시작한 것은 이번주였기 때문에 이렇게 스터디에 대한 첫 게시글을 작성하게 되었습니다.
앞으로 스터디하면서 어떤 것을 배웠고 느꼈는지 작성할 생각입니다.
스터디 진행 방식은 자료구조/알고리즘에 대한 강의를 듣고 그 강의에서 배운 내용을 토대로 대표적인 알고리즘 문제 사이트들인 백준, 프로그래머스, 릿코드 등에서 알고리즘 문제를 풀고 그룹원 모두 함께 코드 리뷰를 하는 방식으로 진행됩니다.
먼저, 자료구조에서 가장 기본적인 배열 강의를 듣고 배열 문제를 선택하여 풀게 되었습니다.
개인적인 생각으로는 가장 기본적인 자료구조지만 굉장히 중요하다고 생각합니다.
배열은 같은 타입의 연관된 데이터를 연속적으로 저장하여 한 변수에 통합하여 관리하는 자료구조라고 할 수 있습니다.
이 배열을 이용하여 기본적인 알고리즘 문제들을 풀었는데, 그 중에 백준에서 최댓값이라는 문제를 풀고 제출했지만 계속 틀렸습니다가 나와서 약간 당황했습니다.
최댓값이란 문제에 대해서 간략하게 설명하자면, 자연수가 저장된 2차원 배열인 9 * 9 배열에서 최댓값과 그 최댓값의 위치(행,열)를 반환하는 문제입니다.
이때, 문제에서는 행과 열의 위치는 (1,1)부터 시작입니다.
왜 틀리게 됐는지 결론만 말하자면, 이중 for문을 통해 각 배열을 탐색하면서 값이 크면 최댓값과 행과 열의 위치를 함께 갱신하는 방식 자체에는 문제없었지만 이중 for 문의 초기값이 문제가 되었습니다.
이중 for 문의 초기값을 각각 1로 줘서, 행과 열의 위치를 나타내는 변수에 저장하여 그대로 출력하게끔 했는데, 행과 열의 위치를 나타내는 변수의 초기값을 0을 저장했기 때문에 제출하여 테스트를 진행할 때, 틀렸다고 나오는 것이였습니다.
그래서 이중 for 문의 초기값 또한 각각 0을 주고, 행과 열의 위치를 출력할 때 각각 +1을 해주는 식으로 해결했습니다.(+1을 해주는 이유는 문제에서 행과 열의 위치는 (1,1)부터 시작이기 때문)
이 문제를 통해 제 자신에게 하고 싶은 말은 문제 좀 제대로 읽고 생각하라고 말하고 싶습니다.
이번에는 릿코드에서 배열 문제를 풀었습니다.
릿코드에서 제공하는 문제들은 모두 영어로 되어있기 때문에, 순간 정신이 아찔해졌습니다.
풀어야 될 배열 문제는 정수값이 저장된 1차원 배열에서 중복된 요소를 제외한 개수를 출력하며, 또한 배열의 원소에서 중복된 요소가 없어야 됩니다.
릿코드를 통해 알고리즘 문제를 처음 풀어보는 것이기 때문에 이것저것 구경하다 이 문제가 two pointer
알고리즘 문제이기도 하다는 것을 알았습니다. 사실 어떤 알고리즘을 사용하는지 모르고 풀어야 하는데, 이미 알아버렸기 때문에 어렵지 않게 풀었습니다. 하지만 몰랐다면 생각이 필요한 문제라고 생각합니다.
아쉬운 점은 코드가 깨끗하지 못하다는 것이였습니다.
예를 들어, 굳이 없어도 될 변수가 있기 때문입니다.
아직 시작한지 얼마 안됐지만 혼자 공부했을 때와 확실히 다른 것을 느꼈습니다.
개인적으로 공부했을 때는 제가 풀고싶은 문제만 풀거나 조금이라도 생각해야될 문제를 풀려고 하면 쉽게 포기하고 다른 분들이 어떤 코드로 해결했는지 제대로 찾아보지 않았습니다.
그렇지만, 이번에 진행하면서 다른 분들은 어떤 코드로, 어떤 생각으로 구현했는지 알 수 있어 정말 좋았습니다.
그래서 이 스터디를 통해 부족한 제 자신이 한 층 더 발전할 것이라 생각하고 임할 것입니다.
감사합니다.