반응형

Two Pointers 3

[leetcode]345. Reverse Vowels of a String

문제 주어진 문자열에서 모음(vowels)들만 뒤집어 반환하는 문제입니다. 모음은 'a', 'e', 'i', 'o', 'u' 다섯 가지로 구성되어 있으며, 대소문자를 구분하지 않습니다. 풀이 문자열을 처리하기 위해 투포인터를 활용하여 문제를 해결할 수 있습니다. 주어진 문자열을 리스트로 변환합니다. 이렇게 하면 문자열의 각 문자에 직접 접근하여 값을 변경할 수 있습니다. 파이썬에서 문자열은 불변한 자료형이므로 리스트로 변환하여 가변한 형태로 다루는 것이 유용합니다. 왼쪽 인덱스(left_index)를 문자열의 시작 위치(0)로, 오른쪽 인덱스(right_index)를 문자열의 끝 위치(len(s) - 1)로 초기화합니다. 왼쪽 인덱스와 오른쪽 인덱스가 만나기 전까지 다음 작업을 반복합니다: 만약 왼쪽 인..

알고리즘 2023.07.21

[leetcode] 11. Container With Most Water

문제 풀이 투 포인터로 풀면 된다. 배열의 처음(left)과 배열의 맨 끝부분(right)의 포인터를 이동하면서 가장 큰 area를 구하면 된다. - area = (right - left) * min(height[left], height[right]) 포인터의 이동은 left와 right의 height를 비교해서 left가 더 크면 right를 왼쪽으로 이동해주고 아니면 left를 오른쪽으로 이동해주면 된다. left가 right보다 크면 loop를 종료하면 된다. 코드 Java class Solution { public int maxArea(int[] height) { int area = 0; int left = 0; int right = height.length - 1; while (left < ri..

알고리즘 2022.08.13

[leetcode] 15. 3Sum

문제 풀이 a + b + c = 0 인 경우를 찾는 문제이다. 투 포인터를 이용해서 풀었다. 우선 정렬을 한 다음에 for 루프를 돌면서 nums[index] 가 a 라고 할 때 포인터를 이동하면서 b 와 c 값을 찾았다. 문제에서 답에 중복을 허용하지 않기 때문에 중복인 경우는 다시 계산하지 않게 처리했다. [0, 0, 0, 0, 0, 0] 와 같은 인풋이 들어왔을 때 한 번만 계산하고 스킵하게 된다. 시간복잡도는 O(N^2) 이 된다. => 정렬하는 데 O(NlogN) + for 루프 돌면서 b와 c값 찾는 데 O(N^2) 코드 fun threeSum(nums: IntArray): List { nums.sort() val result: MutableList = mutableListOf() for (i..

알고리즘 2021.08.07
반응형