본문 바로가기

알고리즘 공부/ps12

[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.
[프로그래머스] N으로 표현 문제 https://school.programmers.co.kr/learn/courses/30/lessons/42895 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 해석 정말 생각하기 어렵다.. 메인이 되는 아이디어 2가지가 있는데 첫번째는 아래와 같다. 예를 들어 5를 3번 사용해서 가능한 가짓수는 5를 "0번 사용 + 3번 사용" 5를 "1번 사용 + 2번 사용" 이라는 것이다 이 경우의 수를 일반화해보면 N이라는 수를 i 번 사용해서 나타낼 수 있는 경우의 수는 0 + (i) 1 + (i-1) 2 + (i-2) ... 이 될 것이다. 두번째 아이디.. 2024. 2. 26.