알고리즘/리트코드 5

3071. Minimum Operations to Write the Letter Y on a Grid

콘테스트 3번 문제로 나온 문제인데, 이 문제도 그렇게 어려운 편은 아니었던 것 같습니다. Y자의 위에까지부분을 iterate하고, 그 다음 부분을 iterate 합니다. 가짓수가 그렇게 많지는 않기 때문에 모든 경우의 수를 다 해버렸습니다. 나중에 결과 보니깐 시간 복잡도 측면에서는 좀 안좋게 나왔네요. class Solution: def minimumOperationsToWriteY(self, grid: List[List[int]]) -> int: n = len(grid) def ttry(x, y): count = 0 for i in range((n // 2)): for j in range(n): if i == j: if grid[i][j] != x: count += 1 elif n-j-1 == i:..

3070. Count Submatrices with Top-Left Element and Sum Less Than k

사실 그렇게 어려운 문제는 아니었습니다. weekly contest에서 두번째로 나왔던 문제로, prefix sum을 사용해서, 각 row의 합을 저장해서 새로운 list에 저장하고, 새로운 row에서 iterate할 때는 새로운 row에서 그 row의 합들과 지금까지 더한 위의 row의 합을 더해주는 방식으로 해서 몇 번의 시행착오 끝에 풀어낼 수 있었습니다. class Solution: def countSubmatrices(self, grid: List[List[int]], k: int) -> int: m, n = len(grid[0]), len(grid) new_matrix = [[0 for _ in range(m)] for _ in range(n)] # print(new_matrix) count ..

Weekly Contest 305. (2367~2370) (list, graph, dp)

오랜만에 리트코드 컨테스트를 다 풀었습니다. problem 2367. Number of Arithmetic Triplets 코드 : class Solution: def arithmeticTriplets(self, nums: List[int], diff: int) -> int: res = 0 for i in range(len(nums)-2): for j in range(i+1, len(nums)-1): for k in range(j+1,len(nums)): if nums[j] - nums[i] == diff and nums[k] - nums[j] == diff: res += 1 return res 설명 : Brute force 알고리즘이 통할 것으로 보여서, Brute force를 사용하였습니다. O(n^..

리트코드 2337. Move Pieces to Obtain a String (Python3, Medium) - 인덱스와 직관 활용!

문제 링크 : https://leetcode.com/problems/move-pieces-to-obtain-a-string/ 문제 설명 : start라는 string에서, "L"은 왼쪽으로, "R"은 오른쪽으로 이동할 수 있습니다. start에서 target으로 이동할 수 있는지를 False, True를 통해서 return 하세요. 예시) 1. input : start = "_L__R__R_", target = "L______RR" output: True 2. input: start = "R_L_", target = "__LR" output: False 3. input: start = "_R", target = "R_" output: False 접근방법 : 처음에는 start 스트링을 수정하거나, 리스트..