📌 LeetCode [238]: Product of Array Except Self🔗 문제 링크문제 설명 📄주어진 정수 배열 nums에서, 자신을 제외한 나머지 모든 요소의 곱으로 이루어진 배열을 반환하는 문제입니다.시간 복잡도는 O(n)이어야 하며, 나눗셈은 사용할 수 없습니다.문제 접근 방식 📋처음에는 각 인덱스에 대해 나머지 모든 숫자를 곱하는 방식을 생각했지만, 이는 효율적이지 않습니다. 대신, 좌측에서의 누적 곱과 우측에서의 누적 곱을 계산하여 효율적으로 문제를 해결할 수 있습니다.아이디어 설명 💡왼쪽 곱(leftResult) 배열:배열의 각 인덱스에서, 해당 요소의 왼쪽에 있는 숫자들의 곱을 저장합니다.오른쪽 곱(rightResult) 배열:배열의 각 인덱스에서, 해당 요소의 오른쪽에..
전체 글
알고리즘 블로그📌 LeetCode [1]: Two Sum🔗 문제 링크문제 설명 📄정수 배열 nums와 정수 target이 주어질 때, 두 숫자의 합이 target이 되는 두 숫자의 인덱스를 찾는 문제입니다.같은 숫자를 두 번 사용할 수 없으며, 유일한 정답이 있다고 가정합니다.문제 접근 방식 📋처음에는 브루트 포스 방식으로 접근하여, 이중 루프를 사용해 가능한 모든 조합을 확인했습니다. 하지만 이 방식은 시간 복잡도가 O(n^2)이기 때문에, 더 효율적인 방법이 필요했습니다.아이디어 설명 💡브루트 포스 방식: 모든 가능한 두 숫자의 조합을 확인하여 nums[i] + nums[j] == target이 되는 경우를 찾았습니다. 이 방식은 간단하지만, 시간 복잡도가 O(n^2)으로 비효율적입니다.Solution ?..
📌 LeetCode [338]: Counting Bits🔗 문제 링크문제 설명 📄정수 n이 주어질 때, 0부터 n까지의 숫자를 2진수로 표현했을 때 1의 개수를 세는 배열을 반환하는 문제입니다.문제 접근 방식 📋처음에는 각 숫자에서 비트가 1인 개수를 세는 방식으로 접근했습니다. 이를 위해 숫자를 2로 나누면서 나머지를 확인하여, 1이 있는지 확인하고 카운트하는 방법을 사용했습니다.아이디어 설명 💡countBit() 함수를 정의하여 숫자를 2로 나누며 1의 개수를 세도록 구현했습니다.0부터 n까지 반복하면서 각 숫자에 대해 countBit() 함수를 호출하고 결과를 answer 리스트에 추가했습니다.Solution 💻class Solution: def countBits(self, n: i..
📌 LeetCode [242]: Valid Anagram🔗 문제 링크문제 설명 📄주어진 두 문자열 s와 t가 주어질 때, t가 s의 애너그램(anagram)인지 확인하는 문제입니다.애너그램이란, 단어 또는 문장을 구성하는 문자의 순서만 다르고 동일한 문자들로 구성된 다른 단어를 의미합니다.문제 접근 방식 📋문자열 s와 t가 같은 문자들을 같은 빈도로 포함하고 있는지 확인하면 됩니다. 이를 위해 문자 빈도수를 세는 방법을 생각했습니다. Python의 collections.Counter를 사용하면 각 문자의 빈도수를 쉽게 구할 수 있기 때문에, 두 문자열의 빈도수를 비교하는 방식으로 접근했습니다.아이디어 설명 💡collections.Counter를 사용하여 문자열 s와 t의 문자 빈도수를 계산합니다..
📌 LeetCode [347]: Top K Frequent Elements🔗 문제 링크문제 설명 📄주어진 정수 배열 nums와 정수 k가 주어질 때, 가장 빈도수가 높은 k개의 요소를 반환하는 문제입니다. 반환된 요소는 어떤 순서로든 상관없습니다.문제 접근 방식 📋먼저, 정수 배열에서 각 숫자의 빈도수를 세는 것이 문제 해결의 핵심이라고 생각했습니다. 이를 위해 딕셔너리를 사용하여 각 숫자의 빈도수를 저장한 후, 빈도수를 기준으로 내림차순 정렬하여 상위 k개의 요소를 추출하는 방식으로 접근했습니다.아이디어 설명 💡딕셔너리(pattern)를 사용하여 각 숫자의 빈도수를 계산합니다.pattern.items()를 빈도수 기준으로 내림차순 정렬하여 sortedItems 리스트를 만듭니다.상위 k개의 요..
📌 LeetCode [191]: Number of 1 Bits🔗 문제 링크문제 설명 📄주어진 양의 정수 n의 2진수 표현에서 1의 개수를 세는 문제입니다.문제 접근 방식 📋처음에는 n을 2로 나누면서 나머지가 1일 때마다 카운트를 증가시키는 방식으로 접근했습니다.아이디어 설명 💡각 비트를 하나씩 확인하기 위해 n % 2를 사용했습니다.n을 2로 나누는 방식으로 오른쪽으로 비트 시프트하며 1의 개수를 세어 나갔습니다.Solution 💻class Solution: def hammingWeight(self, n: int) -> int: answer = 0 while n > 0: if n % 2 == 1: answer +=..
📌 LeetCode [1701]: Average Wating Time🔗 문제링크문제 설명 📄문제 접근 방식 📋도착 시간이 정렬되어 있다고 문제에서 설명되어 있으니 단순히 반복문을 돌며 각각 대기시간을 구하면 된다고 생각하고 접근했습니다.아이디어 설명 💡고객이 도착했을 때, 만약 이전 작업이 끝난 시간이 고객의 도착 시간보다 크면 추가 대기 시간이 발생합니다.그렇기 때문에 만약 excuteTime(작업이 실제 끝난 시간)이 도착 시간보다 크다면 watingTime을 0에서 계산한 시간으로 변경한후totalWaitTime에 합치고 excuteTime은 도착시간+작업시간+기다린 시간을 더해서 갱신해주고 마지막에 customers 의 수로 나누어반환합니다.Solution 💻class Solution:..
도메인 주도 개발(Domain-Driven Design, DDD)이란 무엇인가?1. DDD의 정의도메인 주도 개발(Domain-Driven Design, DDD)은 복잡한 비즈니스 도메인을 효과적으로 모델링하고 관리하기 위한 소프트웨어 개발 방법론입니다.DDD는 도메인 모델을 중심으로 애플리케이션을 설계하여 비즈니스 요구사항을 정확히 반영하고, 유지보수성을 높입니다.2. DDD의 주요 개념도메인(Domain): 소프트웨어가 해결하려는 비즈니스 영역이나 문제 공간.유비쿼터스 언어(Ubiquitous Language): 팀 내 모든 구성원이 공통으로 사용하는 언어로, 도메인 모델과 소통을 일관되게 유지.바운디드 컨텍스트(Bounded Context): 도메인을 여러 개의 독립된 컨텍스트로 분리하여 복잡성을 ..