[알고리즘 스터디] 프로그래머스 | 기초가 탄탄하면 어디로든 갈 수 있다.

     

    🧭 목차

    1. 프로그래머스 코테 스터디란?
    2. 어떤 것을 기대하며 이 과정을 신청했을까?
    3. 그리고 무엇을 느꼈을까?
    4. 기대했던 것 중에서 아쉽거나 앞으로 해보고 싶은 것이 있다면?
    5. 4주간의 여정을 마치며

     

    1. 프로그래머스 코테 스터디란?

     

    교육 과정은 하단의 링크 참고

     

    [스터디/11기] 코딩테스트와 실무 역량 모두 잡는 알고리즘 스터디(Java반)

    🚀 아쉽지만 11기는 마감되었어요. 12기 오픈 알림 신청하고, 최저가에 수강하세요! 최저가 알림 받기 × 청년/경력보유여성 등 임팩트캠퍼스 지원 조건에 해당한다면 참가비 전액 지원! (상세 조

    programmers.co.kr

     

     

     

    2. 어떤 것을 기대하며 이 과정을 신청했을까?

    취준을 위해 코테를 준비하게 되었는데, 혼자서 공부하다 보니 쉬운 문제들 위주로 푸는 것 같은 아쉬움이 있었다.

    그리고 리팩토링과 코드 리뷰를 경험해보고 싶었다. 그러던 중, 좋은 기회로 프로그래머스에서 주최하는 코딩 스터디에 참여하게 되었다.

     

    기대했던 부분은 다음과 같다.

     

    1. 실시간 세션
    2. 리팩토링
    3. 코드 리뷰
    4. 스터디원들과의 커뮤니케이션

     

    3. 그리고 무엇을 느꼈을까?

     

    크게 요약하자면 다음과 같다.

    코테의 정답은 없다.
    그리고 코드를 직접 푸는 것만큼 다른 사람의 코드를 읽는 것 또한 매우 중요하다.

     

    각 주차별 후기는 토글 참고!

     

    1주 차

    좋은 코드란 무엇일까?

    더보기

    좋은 코드의 절대적인 기준이 있는 것이 아니다. 내가 어떤 목적을 가지고 코드를 작성했는지에 따라 달라진다. 그렇기 때문에, 내가 만든 프로그램이 어떤 환경에서, 어떤 목적을 가지고 동작하는지를 알고 설계하는 것이 중요하다!

     

    여러 문제를 푸는 것보다 같은 문제를 다른 풀이로 여러 번 푸는 것이 중요하다고 말씀해주셨는데,

    그 이유를 알 것 같다. 하나의 문제에 이렇게 많은 풀이 방법이 있다니 😂 

    차근차근 포기하지 않으면 되겠지!

     

    첫술에 배부르려고 하지 말고 천천히 소화시켜서 내 지식으로 만들어보자. 

     

    2주 차

    CS와 클린 코드의 중요성

    더보기

    CS는 개발자가 성장하기 위해서 반드시 필요하다.

    • 마인드 셋
      • 성장하기 직전 도약의 상태에서 가장 많은 차이가 난다.
      • 프레임워크나 라이브러리 사용법만 가지고 성장할 수 있는 것은 한계가 있다.
      • 전공자가 4년동안 공부하는 만큼 회사를 다니는 동안 CS를 채워야만 한다.
        • 이것은 기본이다. 컴퓨터가 어떤 원리로 돌아가는지, 이론들이 있는지에 알아야만 한다.
        • 3-4년차가 되었을 때 많은 차이가 나기 때문에 CS 지식은 반.드.시 익혀야 한다.

    개발 고민 상담

    • 개발 전반에 고민들을 답변해주셨다. 코테 관련된 질문 이외에도 커리어 관련, 개발 공부 관련 지식들을 어떤 방향성을 가져야하는지에 대해서도 알 수 있다.
    • 이론 → 원리 → 기본 → 응용 순서로 공부하는 것을 추천

    줄일 수 있을 때까지 코드를 줄여보자.

    • 무조건 짧은 코드가 좋다는 것이 아니다.
    • 쓸모 없는 코드가 남아있지 않는 것이 좋은 코드이다.
    • 코드가 많으면 버그 발생 확률도 높아진다.
    • 코드가 짧고 간결할 수록 견고하다.

     

    3주 차

    빅오 표기법과 디자인 패턴

    더보기
    • 빅오 표기법
    • 경제적으로 생각해야한다. 우리는 엔지니어니까요
    • Art of programming : 프로그래밍 행위에 대한 교과서적인 책이다. 총망라한 책!
      • 고전 명작!
    • 효율성 문제를 해결하는 방법
      • 병목 지점을 찾기
        • 항상 루프 안에 있다.
        • 대놓고 루프는 아니지만 루프가 숨어 있는 것들도 생각해보기
        • → 그렇기 때문에
        • 자료구조를 공부하는 것이 중요하다.
      • 그 곳을 좀 더 빠른것으로 대체한다.
    • OOP를 잘 하기 위해서는
      1. 잘게 나눠야 한다.
      2. 각기 나눈 것들이 어떤 연관 관계를 갖는지 잘 설계한다.
    • 그것들의 기준이 바로 SOLID이다!

    그래서 4명의 해커가 만든 Gang of 4 GoF 답안지를 모으기 시작했고 그것을 디자인 패턴이라고 부르기로 했다.

    디자인 패턴 → SOLID → OOP 이런 식으로 역순으로 공부하는 것을 추천한다.

    외우지 말고 직접 해보자

    언제 쓰이는지, 왜 써야 하는지? 안 쓰면 어떻게 되는지?를 기준으로 공부하면 좋다.

    SOLID 원칙에 의해서 나왔고, 그게 어떤 문제를 해결하는데 필요한 정답인지까지 파악해야 한다.

     

    4주 차

    너비 우선 탐색과 깊이 우선 탐색 

    더보기
    • 비선형 자료구조 (=마인드맵)
      • 뭘 풀어도 답은 똑같이 나온다 = 네트워크 문제
      • 차이 : 어떤 순서대로 찾아가느냐의 차이지 내용의 차이는 없다.
      • 너비 우선 탐색 BFS
        • 앞에서부터 꺼내면서 다음차례를 결정하면..?
      • 깊이 우선 탐색 DFS
        • 뒤에서부터 꺼내면서 ... 다음차례 결정
    • 2xn 타일링 = 깊이 우선 탐색
      • 프로그래밍 알고리즘의 대부분의 해결책은 복잡한 것을 단수화시켜서 반복한다.
      • 큰 문제를 작은 문제들의 연속으로 봐야한다.
      • 하지만 이렇게만으로 해결되지 않는 경우도 있다.
        • 처음의 결과가 다음번에 사용되는 경우! = 다이나믹 프로그래밍
        • 즉 = DP는 지금의 계산 결과가 다음에 영향을 주는 것을 의미한다.
    •  
    • 다양한 문제 풀이 방법이 있으니 열린 마음으로 푸는 것이 좋다.
    • 명확하게 잘라지는 알고리즘의 경계가 있는 것은 아니다!
    • 종류나 이름을 외우기보다는 "접근 방법"에 초점을 맞춰서 공부하는 것이 좋다.

     

     

     

    📖 추천 책 모음 

    * 추가할 예정입니다.

     

     

    마틴 파울러 (소트 웍스 앤솔러지)

    객체지향의 사실과 오해

    오브젝트

    리팩토링, 클린 아키텍처, Object

    Spring - 토비의 스프링

     

     

     

    4. 기대했던 것 중에서 아쉽거나 앞으로 해보고 싶은 것이 있다면?

     

    목표 달성 여부 느낀 점
    실시간 세션 적극적으로 질문해보기
    꼭 코드 관련 질문이 아니더라도 선배 개발자분이라고 생각하고 개발 전반에 대한 질문하면 좋았을텐데, 주어진 기회를 적극적으로 이용해보지 못해서 아쉬웠다.
    리팩토링 자료구조 공부의 필요성
    문제는 풀어도 효율성 테스트에서 떨어지는 경우들이 있어서, 이 문제를 해결하기 위해서는 시간복잡도 혹은 더 효율적으로 사용할 수 있는 방법이 있는지 고민하는 시간이 필요했다. 이런 과정을 통해서 자료구조 공부를 왜 해야하는지, 그것이 나에게 어떤 이점이 있는지를 알 수 있었다.
    코드 리뷰 자신감 있게 일단 올려보자
    현직자분에게 코드 리뷰를 받아볼 너무 좋은 기회였는데, 한 번도 받아보지 못해서 너무 아쉬웠다. 그 이유는.. 내 코드에 자신이 없어서이기도 하고, 코멘트가 달리면 너무 부끄러울 것 같아서였는데, 이번 과정에서 가장 아쉬움이 많은 아픈 손가락 파트이다. 😂 다음에는 틀려도 올려보자 ! 
    스터디원들과의 커뮤니케이션 나는 온라인 내향인이었구나 😊 
    오프라인에서는 말 잘하면서 온라인에서는 조심스러워서 댓글도 쓸까말까하다가 지워버리고, 채팅도 올릴까말까 하다가 올리지 않았다.  코드 리뷰를 하면서 오며가며 다른 스터디원들이랑 친해질 기회가 있으면 좋았을텐데, 사실 3번에서의 문제점이 내려온 케이스이기도 하면서 나에 대해 새롭게 알게된 부분이기도하다. 

     

    앞으로 해보고 싶은 것

    질문적극적으로 해보고 싶다.

    일단 질문을 적극적으로 해보고 싶다를 크게 두 가지로 

    질문을 해보고 싶다는 것적극적으로 해보고 싶다로 나눌 수 있다.

     

    먼저 질문을 해보고 싶다는 것은 "유의미한 질문"이다. 즉, 내가 자료구조, 알고리즘에 대한 이해도가 있어야 유의미한 질문을 할 수 있다. Do it! 자료구조 책을 활용해서 올해가 가기 전에 정렬까지 끝내고 싶다. 구체적인 계획을 세워봐야겠다. 

     

    그리고 적극적으로 해보고 싶다는 "틀려도 일단 고"를 의미한다. 선생님께서 중간중간 질문을 하셨다. 많이 틀리고, 많이 혼나고, 깨져봐야 성장할 수 있는데, 나는 틀리고 싶지 않아서, 조심하다 보니 채팅도 잘 안 하게 되고, 코드 리뷰도 안 올렸던 것 같다. 그래서 좋은 기회들을 누리지(?) 못한 부분이 아쉬웠다. 다음에 이런 기회가 생긴다면 조금 더 가벼운 마음으로 힘을 빼고 이왕 틀릴 거 완벽하게 틀려보자는 마음을 가져봐야겠다. 오히려 힘을 빼면, 틀려도 웃기다.

     

     

    5. 4주간의 여정을 마치며

    총 4번의 세션에 모두 참석하였다. (출석률 100%이다! 셀프 박수 타임 가질게요! 👏👏) 정처기 실기를 준비하면서 우선 수위가 시험이 되다 보니, 상대적으로 코테 스터디의 우선순위가 낮아졌다. 하지만, 출석은 무조건 하자! 그리고 과제는 문제라도 읽어보자! 는 마음으로 세션에 임했다. 아쉽게도 3주 차 이후로는 실기 때문에 수업 따라가기 바빴지만, 그럼에도 불구하고 이 강좌를 추천하냐고 물어본다면? 그렇다고 답할 것이다. 왜냐면, 이 세션은 단순히 코테를 잘 푸는 방법을 알려주는 것에서 끝나는 것이 아니라, 어떻게 하면 좀 더 효율적인 코드를 짤 수 있는지, 개발 공부는 어떤 식으로 하면 좋은지, CS는 왜 공부해야 하는지 등 개발 전반에 대한 실용적인 이야기를 들을 수 있기 때문이다. 나는 아직 쪼렙이지만, 오히려 쪼렙이기 때문에 이런 개발 전반에 대한 이야기들이 중요하다고 생각한다. 코테를 멋들어지게 하는 건 시간이 지나 좀 더 성장한 내가 해주겠지만, 일단 성장하려면 이런 양분이 반드시 필요하다. 지금 내가 프로젝트가 아닌 CS 공부를 하는 게 맞나?라는 생각을 했었지만, 비전공자이기 때문에 정처기는 반드시 필요하다는 말씀에 많은 위로가 되었다. 기초가 탄탄하면 어디로든 갈 수 있다는 믿음이 틀리지는 않았구나를 다시 한번 느꼈다. 

     

    728x90

    댓글