![](https://blog.kakaocdn.net/dn/bvmKxM/btsKIuXtYYG/lXui96Eg6zXkv0PkyOMftK/img.gif)
https://leetcode.com/problems/maximum-product-subarray/description/
오전에 푼 리트코드 문제이다. 📝
누적 합 문제를 푸는 것처럼 누적 곱을 해서
- 가장 큰 양수 / 가장 작은 양수
- 가장 작은 음수 / 가장 큰 음수
두 개의 후보 중 큰 것을 선택해 Maximum Product Subarray를 구하는 방식으로 접근했다.
하지만 누적 곱은 배열에 0이 하나만 껴있어도 그 뒤의 모든 요소들이 0으로 취급이 되어서 옳지 못한 풀이였던 것 같다.
class Solution {
public int maxProduct(int[] nums) {
int answer = Integer.MIN_VALUE;
int product = 1;
for(int i = 0; i < nums.length; i++) {
product *= nums[i];
answer = Math.max(answer, product);
if(product == 0) {
product = 1;
}
}
product = 1;
for(int i = nums.length - 1; i >= 0; i--) {
product *= nums[i];
answer = Math.max(answer, product);
if(product == 0) {
product = 1;
}
}
return answer;
}
}
솔루션에서는 단순히 배열을 순회하며 곱을 계산한다.
처음에는 Subarray 문제인데 왜 선형적으로 곱하기만 해도 답을 구할 수 있지 🤔 의문이 들었는데, 음수를 곱하더라도 뒤에서 음수가 나올 경우 무조건 다 곱해두는 게 가장 최댓값을 반환한다는 것을 알았다.
예를 들어 [-1, 2, 3, -6]의 예제가 있으면 중간 [2, 3] 만 곱하는 것이 아니라 모두 곱하였을 때 최대의 답을 얻을 수 있다.
[-1, 2, 3] 이 예제인 경우 -1을 곱하지 않아야 하는데, [3, 2, -1] 이렇게 반대로 순회하며 곱을 계산하기 때문에 이 케이스도 커버 가능하다.
요즘 해야할 것들이 잘 정리가 안되는 기분이다. 우선순위를 다시 정해보자. 🥺
앞으로 해야하는 것은
- 자바 자료구조 공부
- 이력서 기반 키워드를 잘 설명할 수 있도록 준비
- 서비스 인프라와 테이블 설계 관련 면접 준비
- 예상 질문 답변 작성하기
- 자바, 루비 언어로 코딩 테스트 공부
오늘 포함 주말 동안 이 태스크를 최대한 하고 직접 말해보는 연습을 하려고 한다.
오늘 오후에 자바 자료구조를 정리해보았다. 어제 자바의 정석을 조금 읽었었는데 .. 뇌에 남는 게 하나도 없다.
간단하게라도 기록하면서 공부하자.
타칸과 인프라 면접 스터디를 하였다. 🧐
질문을 잘 가져와줘서 많은 도움이 되었다.
제대로 알고 답변하지 못한 부분은 다음과 같다.
- CloudFront는 왜 쓰셨나요?
- 로드밸런서의 부하 분산 알고리즘을 무엇을 사용하였나요? 다른 알고리즘과의 차이는 무엇인가요?
- ALB를 사용한 이유는 무엇인가요?
- 스케일 아웃과 스케일 업의 차이점, 선택하는 기준?
- 스케일 아웃 작업을 할 때 고려할 점?
- 엔진엑스를 사용하여 리버스 프록시한 이유? 다른 대안은?
- 스프링을 사용한 이유? 다른 프레임워크와 비교한 장점?
- OOP의 주요 특징과 원칙?
- 복제 지연이 발생한 경우 어떻게 해결할 것인지?
- MySQL을 사용한 이유와 다른 RDB와의 차이점?
- 그 외 AWS 네트워크에 대한 질문
갈 길이 머얼다 머얼어
공부한 것, 공부할 것, 공부하였는데 다시 보니까 잘 모르는 것들이 섞여서
무엇을 공부해야할 지 모르는 상태가 된 것 같다 😅 문서화를 잘 해서 한 곳에 잘 정리해두어야겠다.
'우아한테크코스 > 레벨5' 카테고리의 다른 글
[TIL] 2024/11/17 (0) | 2024.11.17 |
---|---|
[TIL] 2024/11/16 (2) | 2024.11.16 |
[TIL] 2024/11/14 (1) | 2024.11.14 |
[TIL] 2024/11/13 (1) | 2024.11.13 |
[TIL] 2024/11/12 (2) | 2024.11.12 |