목차
두 수의 합이 주어진 수가 되는 경우 찾기
- 문제 링크
- 문제 요약
- 주어진 integer array에서 두 수를 선택하여 더한 값이 같은 경우를 찾은 뒤, 그 곱이 가장 큰 경우를 찾아라
- 풀이 요약
- sorted array에서 2 pointer를 사용하여 두 수를 선택한다.
def maxOperations(self, nums: List[int], k: int) -> int:
nums.sort()
left, right = 0, len(nums) - 1
result = 0
while left < right:
if nums[left] + nums[right] == k:
result += 1
left += 1
right -= 1
elif nums[left] + nums[right] < k:
left += 1
else:
right -= 1
return result
반대 경우의 수가 나왔을 때 초기화를 통한 처리 방법
- 문제 링크
- 문제 요약
- 주어진 binary string에서 연속된 1의 개수가 연속된 0의 개수보다 많은 경우 True를 반환하라
- 풀이 요약
- longestOne/Zero, currentOne/Zero를 사용하여 연속된 1과 0의 개수를 센다.
- 반대 것이 나오면 currentOne/Zero를 0으로 초기화하면서 반대 것의 개수를 센다.
def checkZeroOnes(self, s: str) -> bool:
longestOne, longestZero = 0, 0
currentOne, currentZero = 0, 0
for ch in s:
if ch == '1':
currentOne += 1
currentZero = 0
else:
currentZero += 1
currentOne = 0
longestOne = max(longestOne, currentOne)
longestZero = max(longestZero, currentZero)
return longestOne > longestZero
3d 입체를 2d로 투영할때의 면적 구하기
- 문제 링크
- 문제 요약
- 3d 블록 입체를 2d array 형태로 주었을 때, xy, yz, zx 평면으로 투영한 면적의 합을 구하라
- 풀이 요약
- xy: 2d array에서 0이 아닌 값의 개수
- yz: 2d array에서 각 row의 최대값의 합
- zx: 2d array에서 각 column의 최대값의 합
def projectionArea(self, grid: List[List[int]]) -> int:
xy = sum(1 for row in grid for val in row if val)
yz = sum(max(row) for row in grid)
zx = sum(max(col) for col in zip(*grid))
return xy + yz + zx
2024-04-28