좋은 코드란 무엇일까 (feat. 객체지향)
·
Side Tech Notes
개발에 대해 공부하고 프로젝트를 진행하면서 좋은 코드에 대한 말을 많이 듣습니다.좋은 코드를 위해 팀원들과 코드 리뷰를 하며 토론을 하고 여러 책이나 영상을 찾아보며 공부하고 디자인 패턴을 적용하기도 합니다. 그 중 객체지향이라는 키워드는 좋은 코드에서 가장 많이 나오는 키워드 중 하나입니다.그래서 객체지향이란 무엇인지 확인해보고 그에 따라서 제가 생각하는 좋은 코드란 무엇인지 설명하겠습니다.객체지향이란그럼 대체 객체지향이란 무엇일까요? 아래는 gpt가 객체지향 프로그래밍이 뭐야?라는 질문에 대해 답변한 내용입니다.답변을 아래와 같이 정리해 볼 수 있겠네요.프로그램을 클래스와 객체를 통해 캡슐화하여 구현한다.상속과 다형성을 통해 유연성과 확장성을 제공한다.직관적으로 모델링하여 유지보수와 확장이 용이하다...
LeetCode - 1980. Find Unique Binary String
·
Algorithm
문제링크 문제 설명길이가 n인 고유한 이진 문자열 n개가 담긴 문자열 배열 nums가 주어집니다.이때, nums에 존재하지 않는 길이 n의 이진 문자열을 반환하세요.만약 가능한 정답이 여러 개라면, 그중 아무 것이나 반환해도 됩니다. 제한 사항n == nums.length1 nums[i].length == nnums[i]는 '0' 또는 '1'로만 구성됩니다.nums의 모든 문자열은 서로 고유(unique) 합니다. 예시Example 1:Input: nums = ["01","10"]Output: "11"Explanation: "11" does not appear in nums. "00" would also be correct. Example 2:Input: nums = ["00","01"]Output: "..
정적 팩토리 메서드 (정팩메)의 사용에 대해서
·
Side Tech Notes
스터디나 프로젝트를 하면서 많은 사람들이 생성자보다 정팩메를 우선적으로 사용하는 모습을 봤습니다.하지만 저는 가능한 정팩메의 사용을 지양하는 편입니다. 그래서 정팩메의 사용에 대해 토의를 한 적이 여러 번 있어 제 기준에 대해 정리해보려고 합니다.정적 팩토리 메서드 (정팩메)란?정팩메는 static 메서드를 통해 객체를 생성하는 것을 의미합니다.class Food { private int price; private Food(int price) { this.price = price; } public static Food foodWithPrice(int price) { return new Food(price); }} 그러면 왜 많은 사람들이 이런..
LeetCode - 1718. Construct the Lexicographically Largest Valid Sequence
·
Algorithm
문제링크 문제 설명정수 n이 주어졌을 때, 다음 조건을 모두 만족하는 수열을 찾습니다.숫자 1은 수열에서 한 번만 등장합니다.2부터 n까지의 모든 정수는 수열에서 정확히 두 번씩 등장합니다.2부터 n까지의 모든 정수 i에 대해, 두 번째 등장 위치와 첫 번째 등장 위치 사이의 거리는 정확히 i가 되어야 합니다.즉, 숫자 i가 등장하는 두 인덱스 a[i]와 a[j]에 대해, |j - i| = i가 성립해야 합니다.위 조건을 만족하는 여러 개의 수열 중 사전순으로 가장 큰 수열을 반환해야 합니다.두 수열 a와 b의 숫자가 처음으로 달라지는 위치에서 a의 숫자가 b의 숫자보다 크다면, a가 더 큰 수열입니다.예를 들어, [0,1,9,0]은 [0,1,5,6]보다 더 큽니다. (9 > 5)주어진 조건을 만족하는 ..
LeetCode - 1352. Product of the Last K Numbers
·
Algorithm
문제링크 문제 설명ProductOfNumbers 클래스를 구현하세요.ProductOfNumbers()객체를 초기화하며, 빈 상태의 숫자 스트림을 생성합니다.void add(int num)정수 num을 스트림에 추가합니다.int getProduct(int k)현재 리스트에서 마지막 k개의 숫자의 곱을 반환합니다.(항상 k개의 숫자를 포함하고 있다고 가정할 수 있습니다.)추가 조건:테스트 케이스는 연속된 숫자들의 곱이 32비트 정수 범위를 초과하지 않도록 생성됩니다. -> 자바의 int 범위를 넘어서지 않는다는 의미입니다. 제한 사항0 1 add 및 getProduct의 호출은 최대 40,000번까지 가능합니다. 예시Input["ProductOfNumbers","add","add","add","add","a..
LeetCode - 3066. Minimum Operations to Exceed Threshold Value II
·
Algorithm
문제링크 문제 설명0부터 시작하는 정수 배열 nums와 정수 k가 주어집니다.아래의 과정을 하나의 연산으로 정의합니다.nums에서 가장 작은 두 개의 정수 x와 y를 선택합니다.x와 y를 nums에서 제거합니다.min(x, y) \* 2 + max(x, y) 값을 배열에 추가합니다.참고: 배열 nums에 적어도 두 개 이상의 요소가 있어야 이 연산을 수행할 수 있습니다.모든 배열 요소가 k 이상이 되도록 하기 위해 필요한 최소 연산 횟수를 반환하세요.제한 사항2 1 1 입력은 항상 정답이 존재하도록 생성됩니다. 즉, 배열의 모든 요소가 kk 이상이 되도록 만드는 일련의 연산이 반드시 존재합니다.입력에 대한 정답은 항상 존재합니다.풀이 흐름연산의 흐름을 보면 nums에서 가장 작은 수와 두번째로 작은 수를..