알고리즘

· 알고리즘
📌 LeetCode [819]: Most Common Word🔗 문제 링크문제 설명 📄주어진 문자열 paragraph에서 가장 많이 등장하는 단어를 반환하세요. 단, banned 리스트에 포함된 단어는 제외해야 합니다.조건:단어는 알파벳으로만 이루어져 있으며, 대소문자는 구분하지 않습니다.paragraph는 문장부호(예: ,, .)를 포함할 수 있으며, 이들을 무시해야 합니다.동일 빈도의 단어가 여러 개 있을 경우, 조건에 따라 가장 앞에 있는 단어를 반환합니다.문제 해결 접근 🧩데이터 전처리:문자열 paragraph를 소문자로 변환.정규식을 이용하여 단어를 추출.Counter를 사용하여 각 단어의 빈도수를 계산.조건 필터링:banned 리스트에 없는 단어 중 가장 빈도수가 높은 단어를 반환.So..
· 알고리즘
📌 LeetCode [3200]: Maximum Height of a Triangle문제 설명 📄빨간색 블록의 개수를 나타내는 red와 파란색 블록의 개수를 나타내는 blue가 주어집니다.삼각형의 높이를 최대화하려고 합니다.삼각형의 규칙은 다음과 같습니다:각 층의 블록 수는 층의 번호와 동일합니다. 예: 첫 번째 층은 1개의 블록, 두 번째 층은 2개의 블록.삼각형은 빨간 블록 또는 파란 블록으로 시작하여 층마다 번갈아가며 쌓습니다.특정 층을 쌓기에 블록이 부족하면 삼각형은 중단됩니다.문제 해결 접근 💡블록 사용 규칙 분석:빨간 블록과 파란 블록이 교대로 사용되므로, 두 가지 경우를 시뮬레이션:빨간 블록으로 시작하는 경우.파란 블록으로 시작하는 경우.삼각형 높이 계산:n번째 층에서는 n개의 블록이 ..
· 알고리즘
📌 LeetCode [1652]: Defuse the Bomb🔗 문제 링크문제 설명 📄정수 배열 code와 정수 k가 주어집니다. 배열 code는 원형으로 연결된 형태로 동작하며, 배열의 각 원소를 특정 규칙에 따라 암호화 해제해야 합니다.k > 0: 현재 위치에서 오른쪽으로 k개의 요소의 합을 구합니다.k : 현재 위치에서 왼쪽으로 |k|개의 요소의 합을 구합니다.k == 0: 배열의 모든 값은 0으로 설정됩니다.code의 암호 해제된 배열을 반환하세요.문제 해결 접근 💡문제를 단순화하기:k의 값이 양수/음수/0인 경우를 분리해서 해결합니다.양수일 경우: 오른쪽으로 이동하며 합 계산.음수일 경우: 왼쪽으로 이동하며 합 계산.k == 0일 경우: 모든 값을 0으로 설정.효율적인 계산:배열의 길이를..
· 알고리즘
📌 LeetCode [2220]: Minimum Bit Flips to Convert Number🔗 문제 링크문제 설명 📄두 정수 start와 goal이 주어졌을 때, start를 goal로 변환하기 위해 뒤집어야 하는 최소 비트 개수를 구하세요.문제 해결 접근 🚀이진수 변환 및 길이 맞추기:두 숫자를 이진수로 변환합니다.bin(start)[2:]와 bin(goal)[2:]를 사용하여 이진수 문자열로 변환한 뒤, 짧은 문자열 앞에 0을 채워 길이를 맞춥니다.비트 비교:두 이진수 문자열을 순차적으로 비교하여 다른 비트 개수를 세줍니다.최종 결과:뒤집어야 하는 비트의 개수를 반환합니다.Solution 💻class Solution: def minBitFlips(self, start: int, g..
· 알고리즘
📌 LeetCode [136]: Single Number문제 설명 📄주어진 정수 배열 nums에서, 모든 숫자가 두 번 나타나는 상황에서 단 한 번만 나타나는 숫자를 찾으세요.반환 값은 반드시 고유하며, 배열의 각 요소는 한 번만 나타나거나 두 번 나타납니다.문제 해결 접근 📋빈도 계산:collections.Counter를 사용하여 각 숫자의 빈도를 계산합니다.단일 숫자 찾기:빈도 값이 1인 숫자를 찾아 반환합니다.Solution 💻from collections import Counterclass Solution: def singleNumber(self, nums: List[int]) -> int: count = Counter(nums) for key, value i..
· 알고리즘
📌 LeetCode [278]: First Bad Version문제 설명 📄제품 버전이 1부터 n까지 순서대로 제공됩니다.어떤 버전부터 "나쁜 버전"(bad version)이 시작됩니다.isBadVersion(version: int) -> bool API를 사용하여 첫 번째 나쁜 버전을 찾아야 합니다.문제 해결 접근 📋이진 탐색:left와 right 포인터를 설정하여 탐색 범위를 줄입니다.중간 값 mid를 계산하고 isBadVersion(mid)로 확인합니다.mid가 나쁜 버전이면 right = mid - 1로 갱신하여 더 작은 범위를 탐색.그렇지 않으면 left = mid + 1로 갱신하여 더 큰 범위를 탐색.결과 반환:탐색이 끝난 후 첫 번째 나쁜 버전(left)을 반환합니다.Solution ?..
· 알고리즘
📌 LeetCode [2965]: Find Missing and Repeated Values문제 설명 📄2D 리스트 grid가 주어졌을 때:반복되는 값(하나 이상의 빈도)과누락된 값(주어진 값의 범위에서 누락된 값)을 구합니다.결과는 [반복된 값 리스트] + [누락된 값 리스트] 형태로 반환합니다.문제 해결 접근 📋패턴 생성:각 값의 빈도를 저장하기 위해 딕셔너리 pattern을 사용합니다.grid의 모든 요소를 순회하며 빈도를 계산합니다.총 길이 length를 계산하여 범위를 확인합니다.결과 계산:1부터 length까지의 범위를 순회하며:pattern에 없는 값은 누락된 값(missing)으로 추가합니다.빈도가 1보다 큰 값은 반복된 값(repeat)으로 추가합니다.최종적으로 repeat + mi..
· 알고리즘
📌 LeetCode [383]: Ransom Note🔗 문제 링크문제 설명 📄주어진 문자열 ransomNote가 문자열 magazine의 문자들만으로 구성될 수 있는지 확인하는 문제입니다.각 문자는 magazine에서 하나씩만 사용할 수 있습니다.문제 해결 접근 📋collections.Counter를 사용하여 두 문자열의 문자의 개수를 세어 각각의 빈도수를 저장합니다.& 연산자를 사용하여 두 카운터의 교집합을 구하고, 이 교집합이 ransomNote의 카운터와 동일한지 비교합니다.동일하다면 True를 반환하고, 그렇지 않다면 False를 반환합니다.Solution 💻from collections import Counterclass Solution: def canConstruct(self, ..
알고리즘 노트
'알고리즘' 카테고리의 글 목록