알고리즘 7

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 ..

Python 에서 많이 쓰이는 라이브러리 defaultdict

리트코드를 하다보면, 파이썬에서 많이 쓰이는 라이브러리들이 몇 가지 있는데, 그 중 많이 쓰는 라이브러리인 defaultdict에 대해서 알아보도록 하겠습니다. 리트코드를 하다보면, 대략 20프로, 30프로 정도의 문제에서 defaultdict를 쓰면 코드양을 확연하게 줄일 수 있는 좋은 함수라고 생각합니다. 1. import 방법 from collections import defaultdict 2. 활용 및 설명 (1) Counter로 활용! Python에서 자주 사용하는 Counter 모듈도 defaultdict로 쉽게 구현할 수 있습니다. lst에 수를 구하고 싶은 item들이 있다고 할 때, from collections import Counter lst = ["a", "a", "a", "b", ..

알고리즘 2022.08.31

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 스트링을 수정하거나, 리스트..

Google Code Jam 2022 참여 후기

Google Code Jam이 끝났습니다. 요즘 리트코드를 풀면서 어느정도 자신감을 늘려 가던 중, 오, 이런 게 있네? 하면서 구글 측에서 일년에 한 번씩 낸 코딩테스트 입니다. 총 5 개의 라운드가 있습니다. Qualification Round는 1주일 정도를 주고, 1차 라운드는 세 번에 걸쳐서 이뤄지고, (1a, 1b, 1c) 두시간 반 안에 풀어야 합니다. 2차 라운드, 3차 라운드, Final Round 까지 있습니다. 1차에서는 한 번의 라운드에서만 통과해도, 통과한 것으로 친다고 합니다. 2차 라운드를 도달하면 티셔츠를 준다고 하고, 3차 라운드를 가면 구글 리쿠르터에서 연락이 온다고 합니다.. ㄷㄷ 이번에 처음 참여를 해봤지만, 느꼈던 점은, 리트코드보다도 더 느린 UI 가 있고, 문제들..

알고리즘 2022.04.30