전체 글

알고리즘 블로그
· 알고리즘
📌 LeetCode [496]: Next Greater Element I🔗 문제 링크문제 설명 📄nums1과 nums2가 주어졌을 때, nums1의 각 원소에 대해 nums2에서 그 원소보다 큰 첫 번째 값을 찾습니다. 만약 찾을 수 없다면 -1을 반환합니다.문제 해결 접근 🧩OrderedDict 사용:nums1의 요소를 키로, 값을 -1로 초기화하여 저장.중첩 반복:nums2의 각 요소에 대해 오른쪽으로 이동하며 다음으로 큰 값을 탐색.결과 반환:nums1의 순서를 유지한 결과를 반환.Solution 💻from collections import OrderedDictclass Solution: def nextGreaterElement(self, nums1: List[int], nums2: ..
· 알고리즘
📌 LeetCode [258]: Add Digits🔗 문제 링크문제 설명 📄주어진 정수 num에 대해, 모든 자릿수를 더한 값을 계산하여 새로운 숫자를 만듭니다. 이 과정을 자릿수의 합이 한 자리 숫자가 될 때까지 반복합니다.문제 해결 접근 🧩자릿수 합 계산:숫자를 문자열로 변환하여 자릿수를 추출.자릿수를 반복적으로 더하여 새로운 숫자를 생성.조건 반복:결과가 한 자리 숫자가 될 때까지 위 과정을 반복.Solution 💻class Solution: def addDigits(self, num: int) -> int: while num > 9: answer = 0 for i in str(num): answer += ..
· 알고리즘
📌 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 ?..
알고리즘 노트
알고리즘 노트