LeetCode 공부법 - LeetCode gongbubeob

Leetcode 시작하기

백준 2475번을 풀다가 문득 생각이 들었다.
알고리즘은 다른사람들 코드를 보면서 배우는 것이 많다고 하던데 문제 풀기는 성공하지만 다른 사람 코드를 보면서 어떤 코드가 좋은 건지 아직 감이 오지 않는다.
숏코딩이 따로 있긴 하지만 들어가보면 내가 이해하기 힘들거나.. 너무 어려워서 어느정도의 코드를 보고 공부해야 하는지 잘 모르겠다.
그리고 내가 쓴 코드가 어느정도로 괜찮은지? 판단을 못하겠다.
그래서 알고리즘 공부법을 검색하다가 leet code를 추천하길래 시작해보려고 한다.

leet code 의 장점?

  1. 따로 IDE를 쓰지 않아도 웹페이지에서 코드 작성 가능
  2. Run timeMemory Distribution 을 다른 사람들과 비교 가능

leet code의 단점?

  1. 영어다…?

leet code 문제들도 블로그에 포스팅할 예정이다.
생각보다 단점은 아직 없는 것 같다. 사람들이 왜 추천하는지 알겠군..
나중에 블로그를 봤을 때 내가 예전에 이렇게 못했었구나.. 를 확인할 수 있었으면 좋겠다ㅋㅋㅋ 딱히 백준 문제처럼 제한 두지는 않으려고 한다.
제한을 두면 둘수록 못할 때 자괴감이 커져서 금방 포기할 수 있기 때문이다.
일단 git에 하루하루 잔디를 심는 것으로 만족해야지!

목표(2021.07.02)

  • Bronze 5 하루 한 문제씩 풀기!
  • leet code 문제 틈나는대로 풀어보기.

카테고리: algorithm, Blog, leetcode

업데이트: July 2, 2021

공유하기

Twitter Facebook LinkedIn
이전 다음

댓글남기기

일단 당장 시작하고 싶다면, Monthly LeetCode Challenge 를 참가하자.

한국시간 기준 매일 오후 4시에 문제가 올라오고, 다음날 4시전까지 풀이를 제출해야 푼 것으로 인정된다.


※ 문제 저작권 이슈가 있을 수 있기 때문에, 문제는 전부 링크로 올릴 것! 

기억해라, 파인만 알고리즘

1. 문제를 쓴다.

2. 정말 깊이 풀이법을 생각해본다.

3. 답을 쓴다.


1. Solution을 보지 말고, 문제에서 시키는 조건 내에서 최대한 풀어본다. (MAX 1~2시간 고민)

-> 아예 문제에 손도댈 수 없다면 괴롭기만 하다. (== 전혀 도움이 안된다.)

-> 무식하게라도 답을 낼 수 있다면 코딩 연습은 되겠지만, 코딩을 처음 배우는 것이 아닌 한 그런 연습은 필요없다.

2. 만약 풀었다면, 속도와 메모리 사용량 통계 정보를 참고하여 개선점을 찾아본다.

-> 보통 속도와 메모리는 trade-off 관계이다. 일단 속도를 위주로 보도록 하자.

3. 만약 풀지 못했다면, 너무 고민하지 말고 Solution 혹은 Discuss 읽어보고 다시 문제를 생각해서 풀이법을 구현해본다.

4. 다음에 지나가면서라도 복습할 수 있도록, 블로그에 코드와 느낀 감상을 요약하여 잘 적어두고, 1가지 문제를 가능한 많은 방법으로 풀어보도록 하자.

-> 특히 왜 못 풀었는지, 무엇이 부족했는지 적어두면 도움이 된다.

5. 문제를 풀면서 필요하지만, 잘 알지 못했던 내용들은 따로 정리해둔다. (이론, 알고리즘, 자료구조 등)

6. 공부가 안 되는 날에는 너무 상심하지 말고 여태까지 풀었던 문제를 한번 다시 살펴본다.

7. 10개 Easy -> 1개 Medium, 10개 Medium -> 1개 Hard 도전해보기

8. 매월 첫째주 첫 공부시간에는 지난 한 달 동안 풀었던 문제들을 복기해본다.

-> 그냥 매달 챌린지를 최대한 풀어보도록 하자.

미국에서 SW 엔지니어들은 기술 면접으로 coding test를 많이 본다. 기본적으로 면접관들과 coding 하는 화면을 공유하면서 문제를 풀고, 면접관이 요구하는데로 좀 더 성능을 향상시키는 방향으로 코딩을 수정해보기도 한다.

Youtube에서 google coding interview 이런식으로 검색해보면 실제 코딩을 하면서 interview하는 모습을 볼 수가 있다.

이런 코딩 인터뷰는 주로 SW 알고리즘을 가지고 많이 시험을 보게 되는데, 그런 문제를 풀 수 있는 사이트중에 하나가 leetcode이다. 네이버에서 검색해봐도 많은 사용 팁들이 나온다. 이 사이트가 비단 SW 엔지니어로 취업을 준비하는 사람들 뿐 아니라, SW 코딩 테스트 같은 것들을 준비하는 학생들도 유용하게 이용할 수가 있다.

https://leetcode.com/

LeetCode 공부법 - LeetCode gongbubeob

LeetCode - The World's Leading Online Programming Learning Platform

Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview.

leetcode.com

아래 사이트에 활용팁들이 많이 나온다.

https://inner-game.tistory.com/538

LeetCode 공부법 - LeetCode gongbubeob

[왕초보] 리트코드 시작하는 방법 (릿코드 활용법)

릿코드를 시작하는 방법은 다음과 같습니다. 1. 회원가입 leetcode.com/ 위의 리트코드 사이트에서 회원가입을 합니다. 기본적으로 사이트 이용은 무료입니다. 추가적으로, 무료회원을 할지, 유료회원을 할지 정해..

inner-game.tistory.com

리트코드는 무료 문제만 해도 엄청 많기 때문에 굳이 유료 회원을 할 필요는 없다. 정말 많은 문제를 풀어 봤고, 특정 회사의 인터뷰 문제만 골라서 연습해보고 싶은게 아니라면, 굳이..

물론 돈을 안내면 볼 수 없는 문제도 많이 있지만, 돈을 안내도 볼 수 있는 문제도 어마무시하게 많다.

솔루션 같은 경우 돈을 안내면 볼 수 없는 경우가 많지만 해당 문제의 discussion 게시판에 가보면 수도 없이 많은 사람들이 다양한 언어, 다양한 방식으로 문제를 풀어 놓았기 때문에 그걸 참조하면 된다.

먼저 Problems 항목에 들어가 보자.

LeetCode 공부법 - LeetCode gongbubeob

엄청 많은 문제가 있는데, 난이도 (Difficulty), Status(내가 풀려고 시도했던 문제, Submit한 문제, 손도 안댄 문제), 그리고 Tags 항목에 보면 알고리즘 종류별로 선택해서 문제를 풀어볼 수가 있다.

일단 잠겨있지 않은 문제를 하나 클릭해서 들어가보면, 왼쪽에 문제 설명이 나오고, 오른쪽에는 문제를 풀 수 있는 창이 나온다. 프로그래밍 언어는 자신이 준비하고 있는걸로 선택할 수 있다. C보다는 C++이 standard function으로 제공하는 함수들이 많기 때문에, 이왕 준비하는거 C++ 같은 좀 더 최신 언어로 준비하는 게 좋은 것 같다. (요즘은 자바나 파이썬 같은 언어로 많이 준비해서, 그 언어들로 된 솔루션을 많이 볼 수 있다. 참고로 구글 면접 같은 경우는 파이썬으로 봐서 패스 한 경우, 자바로 다시 준비라하라고 한 경우도 있다고 하니, 앱 엔지니어 할꺼라면 파이썬보다는 자바로 준비하는게 좋을 듯 하다.)

문제를 풀고 나서 아래 RunCode를 누르면 컴파일 및 실행이되고, 문제 답이 나오면 Submit을 해서 결과를 볼 수 있다. Submit을 하는 경우 다양한 케이스에 대해서 체크하고, 또 실행 속도 같은것을 보고 fail이 날 수도 있다.

LeetCode 공부법 - LeetCode gongbubeob

문제를 풀면서 디버깅도 가능하면 좋을텐데, 디버깅 툴을 이용하려면 또 유료 회원이 되어야 하니, 본인이 사용하는 개발툴로 코딩해서 디버깅 한 후에 답만 올려서 확인하는 것도 방법이다.

그런데 개발툴로 해당 문제를 옮겨서 디버깅 하려면, main 함수도 짜주고 input도 넣어줘야 하니까, 그런게 귀찮으면 그냥 printf (cout) 같은거 써서 컴파일하면 이 값들은 확인할 수가 있다.

그리고 답을 모르겠다면 Discussion 게시판 가서 본인이 사용하는 랭귀지로 검색해보면 다양한 답을 볼 수 있다.

C++ 언어로 검색했을 때 답변들,

이 때 답변들 보면 추천수를 볼 수 있는데, 당연히 추천이 많은 해답이 잘 짜여진 코드다.

내가 여러가지 방법으로 고민해서 짜보고 디버깅도 해보고, 안되면 잘 짜여진 코드를 먼저 분석하고 이해한 뒤에, 안보고 다시 코딩해보는것 (바둑이나 체스면 복기한다고 해야 하나..)도 많은 도움이 될꺼라고 생각한다.

LeetCode 공부법 - LeetCode gongbubeob

SW 엔지니어가 되서 아마존, 구글, 페이스북, 애플, 넷플릭스 등등,, 내로라 하는 회사에 들어가고 싶다면 열심히 문제를 풀어봐서, 어떤 문제가 나와도 기계적으로 풀 수 있어야 한답니다.

p.s. 추가 수정

유료 회원 구입했다. 첫째로 링크드 리스트 같은 문제에서 인풋 배열값을 가지고 링크드 리스트로 만들어서 넣어줘야 하는데, 그거 만들어 넣는게 무지 귀찮았다.

두번째로, 회사별 기출문제를 보고 싶었다. 특정 회사 인터뷰가 잡혔을 때 시간이 너무 없어서, 짧은 시간이나마 그 회사 기출 문제만 풀어보려고 유료회원을 가입했다.

유료회원 가입했더니, 디버깅이 세상 편할 수가 없다. Visual Studio 같은 경우는 내가 보고 싶은 변수들을 일일히 다 지정해 줘야 하는데 리트코드에서는 알아서 내 코드를 분석해서 변수 값들을 보여준다. 그리고 인풋 값도 조정해서 돌려볼 수가 있다.

아래처럼 break point 잡고 보면 그 때 변수들 값이 다 보임.

LeetCode 공부법 - LeetCode gongbubeob

문제 정렬할 때 Tags에서 회사별로 정렬이 가능하다.

LeetCode 공부법 - LeetCode gongbubeob

또한 Frequency 탭을 누르면 자주 출제된 순서대로 문제를 볼 수 있어서, 각 회사별 자주 출제되는 문제를 볼 수 있다. 하지만 이것은 회원들이 자발적으로 어떤 회사 인터뷰에서 봤다고 tab를 달아준 것이기 때문에 정확하다고는 할 수 없을 것 같지만 Frequency로 정렬된 문제들은 확실히 좋긴 하다.

LeetCode 공부법 - LeetCode gongbubeob

하루에 한문제 겨우 푸는데, 언제 600문제 정도 풀려나.. 어흑...

그래도 근 한달동안 70문제 풀었음. 본인이 몇문제나 풀었는지, 언제 얼마나 문제를 풀었는지 통계가 잘 나온다.

LeetCode 공부법 - LeetCode gongbubeob

내 프로파일 페이지 들어가면 나의 활동 기록들이 나오는데, 주별로 submission을 몇번이나 했는지 나옴.

LeetCode 공부법 - LeetCode gongbubeob

리트코드 공부하다 보면, 왠지 나중에 코딩 과외를 하게 될 것 같다.

※ 리트코드 추가팁

문제를 풀고 Submit을 하게 되면 내가 푼 solution이 런타임이 얼마이고 메모리 사용량이 얼마인지 볼 수가 있다. 그리고 Status에서 Accepted 부분을 클릭하면, Submissions된 모든 솔루션에 대해서 통계 결과가 보여진다.

LeetCode 공부법 - LeetCode gongbubeob

이 중에서 월등이 성능이 좋아 보이는 막대 그래프를 하나 클릭하면 Submissions된 코드를 볼 수 있다.

LeetCode 공부법 - LeetCode gongbubeob

이와 같은 경우 나의 해법과 다른 사람들의 해법의 차이를 보며 비교해 보는 것도 도움이 많이 될 듯 하다.

※ 세션을 여러개 만들기

Problems 탭에 들어가 보면 오른쪽 위에 Session 탭이 보인다.

LeetCode 공부법 - LeetCode gongbubeob

각 세션별로 몇문제를 풀었는지 보여주는 것인데, 세팅 버튼을 눌러서 세션을 여러개 만들 수 있다.

새로 생성할 Session이름을 적은 뒤에 Create를 해도 되고, Session 이름 옆에 연필 버튼 눌러서 이름을 바꿀 수도 있다.

LeetCode 공부법 - LeetCode gongbubeob

이렇게 하면 Session 항목에서 Topdown 버튼으로 내가 원하는 Session을 선택하고 문제를 풀면 그 Session에 기록이 저장된다.

LeetCode 공부법 - LeetCode gongbubeob

Session을 여러개 만들 필요가 뭐가 있을까?

뭐 여러사람이 한 계정을 가지고 문제를 풀 때 따로 기록 될 수 있고, 또 내가 풀었던 문제들을 모두 reset하고 새로 다시 풀어보고 싶을 때도 Session을 새로 만들어 풀어볼 수도 있을 것 같다.

주위에 FAANG에 입성 성공한 지인의 이야기를 들어보니, Session 이 계속 새로 만들어서 reset해가면서 모든 문제를 한번 submit에 pass할 때까지 풀고 또 풀었다는 이야기가 있다.