본문 바로가기

알고리즘 공부28

[LeetCode] Container With Most Water 문제 https://leetcode.com/problems/container-with-most-water/description/ 해석 height배열에서 2개의 height를 골라 그 안에 가장 많은 양의 물을 저장하고 그 값을 구하는 것이다. 2가지 방법으로 풀어보겠습니다 1. 가장 Naive하게 떠오르는 방법으로는 모든 height의 index를 돌면서 최대값을 갱신하는 것입니다. for i in range(len(height)-1): for j in range(i+1, len(height)): ans = max(ans, min(height[i], height[j])*(j-i)) 이렇게 접근하면 문제는 너무 쉽게 풀리지만, Time Limit에 걸리게 됩니다. height의 길이가 10^5이기 때문이.. 2024. 3. 29.
[LeetCode] Find All Duplicates in an Array 문제 https://leetcode.com/problems/find-all-duplicates-in-an-array/description/?envType=daily-question&envId=2024-03-25 파라미터로 주어진 nums에 중복된 수가 있으면 그 수를 찾아 return 하라는 간단한 문제입니다. 해석 3가지 방법으로 풀어보겠습니다. 1. 1 ~ N 까지의 체크할 수 있는 공간을 만들어두기 이 경우엔, 1 ~ N을 리스트로 만들어 1의 값으로 만들어 두고, nums를 돌며 나오는 값을 리스트에서 -1 해준다. arr = [1] * (N+1) for i in nums: arr[i] -= 1 for i in nums: if arr[i] < 0: ans.append(i) return ans 다만.. 2024. 3. 25.
[LeetCode] Two Sum 문제 https://leetcode.com/problems/two-sum/description/ 설명 문제는 굉장히 쉽습니다. nums 리스트 안의 값 중 target값을 만족하는 두 값을 찾고 그 두값의 index를 return 하면 됩니다! 1. 가장 먼저 떠오르는 방법은 2중 for문을 활용해 인덱스의 조회를 통한 탐색방법이 있습니다. 근데, 1번의 방법은 O(n^2)의 시간복잡도가 필요하죠,, 시간이 너무 오래 걸린다는 말입니다. 따라서 다른 더 빠른 방법을 생각해봐야 합니다. // 1번 방법 for (int i=0;i 2024. 3. 24.
Greedy라는 방법론 코딩 테스트 대비를 하면서 느낀 진짜 어려운 파트 중 하나가 Greedy 라는 파트이다. 이 파트가 왜 어렵게 느껴졌을까? 대부분 코딩 테스트, 알고리즘 을 학습할때 print, a+b 등의 문제를 풀고 나서 처음으로 마주하는 문제가 아래와 같은 문제이다. https://www.acmicpc.net/problem/5585 5585번: 거스름돈 타로는 자주 JOI잡화점에서 물건을 산다. JOI잡화점에는 잔돈으로 500엔, 100엔, 50엔, 10엔, 5엔, 1엔이 충분히 있고, 언제나 거스름돈 개수가 가장 적게 잔돈을 준다. 타로가 JOI잡화점에서 물건을 사 www.acmicpc.net "쉬운데요?" 이건 쉽지.. 너무 직관적으로 방법이 떠오르고 그 방법이 맞기 때문이다. 그렇다면 이 문제는? https:.. 2024. 3. 19.