2023/09/13 4

[Leetcode Top Interview 150] 122. Best Time to Buy and Sell Stock II

난이도 : medium 문제링크 int 배열인 prices가 주어진다 i인덱스 값은 i날짜의 상품가격이다 날마다 사거나 팔수 있음 하루에 최대 하나만 보유할 수 있음 구매한 날에 즉시 판매 가능 최대 이익을 리턴하라 1. 접근법 이익을 볼 수 있는 거래가 많을수록 최대 이익을 얻을 수 있다 저점에 사서 고점에 파는 전략을 선택한다 그리디 알고리즘을 활용하여 풀 수 있다 2. 의사코드 public int maxProfit(int[] prices) { int maxProfit = 0; int curIdx = prices.length-1, prevIdx = curIdx-1; // 뒤에서부터 조회 : 판매 날짜에 대한 저점 매수 날을 찾는다 (모든 배열 탐색할 때까지) while (curIdx > 0) { //..

Algorithm/(Java) PS 2023.09.13

[Leetcode Top Interview 150] 121. Best Time to Buy and Sell Stock

난이도 : easy 문제링크 prices라는 정수형 배열이 주어진다 prices의 요소는 인덱스 i날짜의 재고 가격을 뜻한다 이익이 최대가 되는 날짜를 구하라 1. 접근법 가장 싸게사서 가장 비싸게 팔아야 최대의 이익이 발생함 내림차순일 경우, 0을 리턴함 판매일은 구매일 이후여야 한다 구매가 - 판매가가 최대 이익값 2. 의사코드 for (int i = 1; i prices[i] && i < maxDay) { // buy // min 값 업데이트 // minday는 현재..

Algorithm/(Java) PS 2023.09.13

[Leetcode Top Interview 150] 189. Rotate Array

난이도 : medium 문제링크 int 배열인 nums가 주어짐 배열을 주어진 k번만큼 오른쪽에서 회전하세요 1. 접근법 k부터 마지막까지 원소들을 미리 저장해둠 0부터 마지막-k까지 원소들을 k부터 마지막까지 할당함 k부터 마지막까지 원소들을 미리 저장해둔 배열에서 꺼내서 할당함 2. 의사코드 public void rotate(int[] nums, int k) { k = k % nums.length; if (k == 0 || nums.length == 1) { return; } int[] tmpArr = new int[nums.length-k]; for (int i = 0; i < nums.length-k; i++) { // 1. tmpArr에 0 ~ 오른쪽에서 k번째까지 저장 } for (int i ..

Algorithm/(Java) PS 2023.09.13

[Leetcode Top Interview 150] 169. Majority Element

난이도 : easy 문제링크 int 배열에서, 가장 많이 등장한 숫자를 리턴하라 2/n번 이상 나타나야 한다 1. 접근법 두번째 원소부터 반복하면서 배열의 원소를 순회한다 map을 이용하여 원소별 카운트를 저장한다 카운트를 내림차순으로 정렬하고, 첫번째 원소를 리턴한다 2. 의사코드 for (int i = 0; i < nums.length; i++) { map에 원소별 원소 갯수 put } for (Map.Entry entry : map을 value의 내림차순으로 정렬한 list) { return entry.getKey(); } return 0; 3. 구현 코드 public int majorityElement(int[] nums) { Map map = new HashMap(); for (int i = 0..

Algorithm/(Java) PS 2023.09.13