문제)
- 최대 한번의 거래만 가능할 때 (주식을 하나 사고 또는 하나 파는) 최대 수익이 얼마인지 찾아라
- 입력으로 i번째 요소가 i일에 주어진 주식의 가격인 배열을 주어진다.
- 주식을 구입하기 전에는 주식을 팔 수 없다.
Input : int[] prices = { 8, 2, 6, 5, 1, 7, 5 }
Output : 6
설명) : 5일에 구매 6일에 판매 => 이익 7 - 1 = 6
public class Q1 {
public static void main(String[] args) {
int[] prices = { 8, 2, 6, 5, 1, 7, 5 };
System.out.println(maxProfit(prices));
}
public static int maxProfit(int[] prices) {
if (prices.length == 0) {
return 0;
}
int max = 0;
int min = prices[0];
for (int i = 0; i < prices.length; i++) {
if (prices[i] < min) {
min = prices[i];
} else {
max = Math.max(max, prices[i] - min);
}
}
return max;
}
}
문제)
Integer 배열 nums 와 k가 있을 때 subarray의 합이 k와 같은 경우의 수를 출력Input : int[] nums = {3, 4, 7, 2, -3, 1, 4, 2} , int k = 7
Output : 4
public class Q2 {
public static void main(String[] args) {
int[] nums = { 3, 4, 7, 2, -3, 1, 4, 2 };
int k = 7;
System.out.println(subArraySum(nums, k));
}
public static int subArraySum(int[] nums, int k) {
int count = 0;
for (int i = 0; i < nums.length; i++) {
int sum = 0;
for (int j = i; j < nums.length; j++) {
sum += nums[j];
if (sum == k) {
count++;
}
}
}
return count;
}
}
2번 문제와 동일
getOrDefault() : 해당 key를 포함하면 그 value를 가져온다. 포함 안하면 default 값을 가져온다.
꼭 기억하기
import java.util.HashMap;
import java.util.Map;
public class Q3 {
public static void main(String[] args) {
int[] nums = { 3, 4, 7, 2, -3, 1, 4, 2 };
int k = 7;
System.out.println(subArraySum_map(nums, k));
}
public static int subArraySum_map(int[] nums, int k) {
int count = 0;
Map<Integer, Integer> map = new HashMap<Integer, Integer>();
map.put(0, 1);
int sum = 0;
for (int i = 0; i < nums.length; i++) {
sum += nums[i];
if (map.containsKey(sum - k)) {
count += map.get(sum - k);
}
map.put(sum, map.getOrDefault(sum, 0) + 1);
}
return count;
}
}
인프런 강의 : 코딩테스트 전 꼭 알아야 할 개념과 문제(with 자바) - 푸샵맨 코딩스터디