📌 LeetCode [2696]: Minimum String Length After Removing Substrings🔗 문제 링크문제 설명 📄주어진 문자열 s에서, 다음 규칙에 따라 문자열을 변환합니다:문자열에서 "AB" 또는 "CD"가 연속된 경우 이를 제거합니다.제거한 뒤, 남은 문자열로 다시 같은 과정을 반복합니다.더 이상 "AB" 또는 "CD"를 제거할 수 없으면 문자열의 길이를 반환합니다.목표: 최종적으로 남은 문자열의 길이를 계산하세요.문제 접근 방식 📋스택을 활용:스택 자료구조를 이용해 "AB" 또는 "CD"를 제거합니다.스택의 마지막 문자와 현재 문자를 비교하여 규칙에 따라 제거 또는 추가 작업을 수행합니다.최종 결과:문자열 탐색이 끝난 후, 스택에 남은 문자의 개수가 최종 문자열..
알고리즘/리트코드
📌 LeetCode [2022]: Convert 1D Array Into 2D Array🔗 문제 링크문제 설명 📄1차원 배열 original과 행 개수 m, 열 개수 n이 주어졌습니다.1차원 배열을 주어진 크기의 2차원 배열로 변환해야 합니다.조건:변환이 불가능하면 빈 배열을 반환합니다.변환된 배열의 요소는 original 배열의 요소 순서를 유지해야 합니다.문제 접근 방식 📋조건 확인:배열 original의 길이와 주어진 2D 배열 크기 (m \times n)이 맞는지 확인합니다.길이가 맞지 않으면 변환할 수 없으므로 빈 배열을 반환합니다.행 단위로 원소 채우기:각 원소를 row * n + col 방식으로 계산하여 적절히 배열에 배치합니다.Solution 💻class Solution: d..
📌 LeetCode [796]: Rotate String🔗 문제 링크문제 설명 📄문자열 s를 임의로 회전(rotate)하여 문자열 goal과 동일하게 만들 수 있는지 확인하는 문제입니다.문자열을 회전시키는 방법은 문자열의 왼쪽에서 한 글자를 잘라서 끝으로 붙이는 것입니다.문제 접근 방식 📋회전된 문자열 생성:문자열 s의 부분 문자열을 슬라이싱하여 회전된 문자열을 생성합니다.생성된 문자열과 goal을 비교합니다.동등성 비교:회전된 문자열이 goal과 동일한 경우 True를 반환합니다.모든 회전된 문자열을 검사한 후에도 goal과 동일한 경우가 없으면 False를 반환합니다.Solution 💻class Solution: def rotateString(self, s: str, goal: str)..
📌 LeetCode [1331]: Rank Transform of an Array🔗 문제 링크문제 설명 📄주어진 배열 arr의 각 요소를 랭크(Rank)로 변환해야 합니다.랭크는 다음과 같은 규칙에 따라 정의됩니다:배열의 고유 요소들을 정렬합니다.정렬된 순서에 따라 각 고유 요소에 1부터 시작하는 랭크를 할당합니다.원래 배열의 각 요소를 해당 랭크로 대체하여 반환합니다.문제 접근 방식 📋중복 제거 및 정렬:set을 사용해 고유 요소를 추출한 뒤, 정렬하여 각 요소에 랭크를 할당합니다.맵핑 생성:정렬된 요소를 기준으로 {값: 랭크} 형태의 딕셔너리를 생성합니다.랭크 변환:원래 배열의 각 요소를 딕셔너리를 참조해 랭크로 변환합니다.Solution 💻class Solution: def array..
📌 LeetCode [1331]: Rank Transform of an Array🔗 문제 링크문제 설명 📄주어진 배열 arr의 각 요소를 랭크(Rank)로 변환해야 합니다.랭크는 다음과 같은 규칙에 따라 정의됩니다:배열의 고유 요소들을 정렬합니다.정렬된 순서에 따라 각 고유 요소에 1부터 시작하는 랭크를 할당합니다.원래 배열의 각 요소를 해당 랭크로 대체하여 반환합니다.문제 접근 방식 📋중복 제거 및 정렬:set을 사용해 고유 요소를 추출한 뒤, 정렬하여 각 요소에 랭크를 할당합니다.맵핑 생성:정렬된 요소를 기준으로 {값: 랭크} 형태의 딕셔너리를 생성합니다.랭크 변환:원래 배열의 각 요소를 딕셔너리를 참조해 랭크로 변환합니다.Solution 💻class Solution: def array..
📌 LeetCode [1550]: Three Consecutive Odds🔗 문제 링크문제 설명 📄주어진 배열 arr에서 3개의 연속된 홀수를 찾는 문제입니다.연속된 홀수가 발견되면 True를 반환하고, 없으면 False를 반환합니다.문제 접근 방식 📋조건 검사:배열을 순회하며 각 숫자가 홀수인지 확인합니다.홀수라면 카운트를 증가시키고, 짝수를 만나면 카운트를 초기화합니다.결과 반환:카운트가 3에 도달하면 즉시 True를 반환합니다.순회가 끝날 때까지 조건을 만족하지 않으면 False를 반환합니다.Solution 💻class Solution: def threeConsecutiveOdds(self, arr: List[int]) -> bool: answer = 0 fo..
📌 LeetCode [1380]: Lucky Numbers in a Matrix🔗 문제 링크문제 설명 📄주어진 행렬에서 Lucky Number를 찾아야 합니다. Lucky Number는 다음 조건을 만족하는 숫자입니다:해당 행의 최소값.해당 열의 최대값.모든 Lucky Number를 리스트로 반환하세요.문제 접근 방식 📋각 행의 최소값을 구합니다.각 열의 최대값을 구합니다.행의 최소값과 열의 최대값의 교집합을 찾으면 Lucky Number가 됩니다.Solution 💻첫 번째 코드class Solution: def luckyNumbers(self, matrix: List[List[int]]) -> List[int]: minCol = [float('inf') for _ in ran..
📌 LeetCode [1636]: Sort Array by Increasing Frequency🔗 문제 링크문제 설명 📄주어진 정수 배열 nums를 다음 규칙에 따라 정렬합니다:각 숫자의 빈도수에 따라 오름차순으로 정렬합니다.빈도수가 동일한 경우, 숫자를 내림차순으로 정렬합니다.정렬된 배열을 반환하세요.문제 접근 방식 📋각 숫자의 빈도를 계산하기 위해 Counter를 사용합니다.빈도수를 기준으로 정렬하고, 동일한 빈도수일 경우 숫자를 내림차순으로 정렬합니다.정렬된 결과를 기반으로 새로운 리스트를 생성합니다.Solution 💻from collections import Counterclass Solution: def frequencySort(self, nums: List[int]) -> Lis..