Go, Vantage point
가까운 곳을 걷지 않고 서는 먼 곳을 갈 수 없다.
Github | https://github.com/overnew/
Blog | https://everenew.tistory.com/
문제 https://leetcode.com/problems/spiral-matrix/ Spiral Matrix - LeetCode 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 풀이 난이도: Medium 재귀 형식으로 해결한 문제. 행렬을 나선형 순서로 돌아가기 위해서는 결국에는 외각을 한 바퀴 돌고 한 칸 안쪽에서 다시 한 바퀴 도는 것을 반복하게 된다. 따라서 재귀로 표현하기 적합하다. 한 칸의 외각의 범위를 표현하기 위해서는 단 두가지 점인, 왼쪽 위(left top)와 ..
*본 게시물은 [클린 코드] 와 [실용주의 프로그래머] 서적에서 배운 것 들을 잘 활용하기 위해 정리한 글입니다. *문제시 삭제하겠습니다. 자료 추상화 조회(get)와 설정(set) 함수를 제공한다면 클래스의 구현은 전혀 감춰지지 않는다. 인터페이스나 조회, 설정 함수만으로는 추상화가 이뤄지지 않는다. 자료와 객체의 비대칭 자료 구조는 자료를 그대로 공개하며 별다른 함수를 제공하지 않는다. 반면에 객체는 추상화로 자료를 숨기고, 자료를 다루는 함수만 공개한다. 물론 객체만이 장점을 가지는 건 아니다. 서로는 상반되는 장점과 단점을 가진다. 절차 지향 코드 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 public class Square{ public Po..
*본 게시물은 [클린 코드] 서적에서 배운 것 들을 잘 활용하기 위해 해당 서적을 정리한 글입니다. *문제시 삭제하겠습니다. 클래스의 체계 변수 목록이 가장 먼저 나오며, 추상화 단계의 순서대로 작성한다. static과 public 상수 다음으로 정적 비공개 변수, 마지막으로 비공개 변수 순서를 지키자. (공개 변수는 사용할 일이 거의 없어야 한다.) 비공개(private) 함수는 자신을 호출하는 공개(public)의 직후에 작성하자. 캡슐화 캡슐화를 해제하는 결정은 언제나 최후의 수단이어야 한다. 함수를 만드는 규칙은 첫번째도 작게, 두 번째는 더 작게이다. 이는 클래스에서도 동일하다. 함수는 실질적인 라인수로 측정을 할 수 있었다면, 클래스에는 다음과 같은 측도가 있다. 단일 책임 원칙 (Single..
문제 https://leetcode.com/problems/set-matrix-zeroes/ Set Matrix Zeroes - LeetCode 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 풀이 난이도: Medium 단순히 새로운 2차원 배열에 값을 복사해 넣으면서 만들면 굉장히 쉽지만 O(mn)의 공간 복잡도가 소요된다. 공간 복잡도를 최적화하는 다른 방법으로는 각 row와 column이 0으로 채워져야하는지 여부를 O(n + m) 공간으로 저장은 가능하지만, 문제에서는 i..
문제 https://leetcode.com/problems/merge-k-sorted-lists/ Merge k Sorted Lists - LeetCode 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 풀이 난이도: Hard 대표적인 우선순위 큐 문제. 일반적인 정렬로 해결하기에는 범위가 너무 크다. 리스트의 최대 개수(k)는 10,000개, 각 리스트의 연결 노드들은 최대 500개가 될 수 있다. 모두 한꺼번에 정렬로 해결할려면 최악의 경우 5,000,000 개의 노드를 정렬..
문제 https://leetcode.com/problems/merge-two-sorted-lists/ Merge Two Sorted Lists - LeetCode 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 풀이 난이도: Easy 정렬되어 주어지는 2가지 NodeList를 정렬된 순서로 병합하는 문제. 반복문 풀이와 재귀 풀이 두 가지를 모두 확인해보자. 반복문 풀이 반복문은 두 연결 노드의 값을 비교하여 더 작은 값을 새로운 병합 연결 노드와 연결해주자. 최종적으로는 한쪽의..
*본 게시물은 [클린 코드] 서적에서 배운 것 들을 잘 활용하기 위해 해당 서적을 정리한 글입니다. *문제시 삭제하겠습니다. 소프트웨어에서 이름은 어디에나 쓰인다. 우리가 코드를 짤때는 대부분의 것들을 직접 이름을 붙인다. 전에 소개했듯이 우리는 코드를 작성할 때 대부분의 시간을 작성된 코드를 다시 읽느라 시간을 보낸다고 했다. 따라서 알맞은 이름을 지어주어야 코드를 읽는 자신과 독자의 시간을 아껴줄 수 있다. 물론 좋은 이름을 짓기에는 오랜 시간이 걸리지만, 책에서는 오히려 알기 쉬운 이름으로 절약할 수 있는 시간이 더 많다고 한다. 좋은 이름을 짓는 규칙을 아래에 소개한다. 의도를 분명히 밝혀라 주석이 필요하다면 의도를 분명히 들어내지 못한 것 의도가 분명한 이름은 코드의 이해와 변경에 용이한다. 단..
문제 https://leetcode.com/problems/non-overlapping-intervals/ Non-overlapping Intervals - LeetCode 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 풀이 난이도: Medium 겹치지 않는 구간들만을 남기고 만약 겹치는 구간이 있다면 최소로 제거돼야 하는 구간의 수를 구하는 문제였다. 예를 들어 [1,2] [3,4] [1,4]의 구간이 있다면 [1,4]가 나머지 두 구간을 포함하며 겹친 상태가 된다. 겹치지 ..
문제 https://leetcode.com/problems/merge-intervals/ Merge Intervals - LeetCode 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 풀이 난이도: Medium 이전 문제 [LeetCode] 57. Insert Interval (Java)와 거의 비슷하게 해결할 수 있지만, 추가적인 아이디어도 소개하겠다. 일단, 가장 간단한 풀이는 주어진 2차원 배열을 정렬 후에 겹치는(overlapping) 부분을 합치면 된다. 자바에서의 2..
문제 https://leetcode.com/problems/insert-interval/ Insert Interval - LeetCode 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 풀이 난이도: Medium start와 end로 구성된 구간이 주어질 때, 새로운 구간의 삽입으로 변경된 구간을 반환하는 문제. 사실 주어지는 모든 구간은 겹치는(overlapping) 구간이 없이 모두 정렬되어 있지만, 주어지는 모든 구간도 겹치는 부분을 판단해 주는 문제로 풀어버렸다. 이런 풀..