diff --git a/best-time-to-buy-and-sell-stock/rivkode.java b/best-time-to-buy-and-sell-stock/rivkode.java new file mode 100644 index 0000000000..c4c9eb7ef0 --- /dev/null +++ b/best-time-to-buy-and-sell-stock/rivkode.java @@ -0,0 +1,52 @@ +/* +1. 문제 이해 +주식을 가장 작은 값에 사서 최고값에 팔아야 한다. +단순히 주식에서 최고값을 파는게 아니다. 구매 시간과 판매 시간이 정해져있으므로 반드시 산 시각보다 후에 팔아야 한다. + +2. 알고리즘 +2중 for loop ? + +3. 구현 + +포인터를 하나씩 왼쪽에서 오른쪽으로 이동하며 이후 오른쪽 값들을 대입하여 뺴본다. 즉 무식하게 다 돈다 + +4. 예외 +만약 모든 값이 음수라면 0을 리턴한다 +10만이라서 2중 루프 돌면 시간초과 나지 않을까 ? +-> 아 .. 200/212 케이스에서 Time limit Exceeded 발생하네 + +그러면 다른 알고리즘으로 접근해야한다. +답지 참고 +직관을 이용해야하네 +i 번째 시기에 최대 수익을 얻으려면 i 번째 날 전 중 최저가를 찾아서 빼면 된다. +*/ + +import java.util.*; + +class Solution { + public int maxProfit(int[] prices) { + int max = 0; + int min = prices[0]; + + for (int i=1; i height[e]) { + e -= 1; + } else { + s += 1; + } + } + + return maxArea; + } +} diff --git a/group-anagrams/rivkode.java b/group-anagrams/rivkode.java new file mode 100644 index 0000000000..8f27ae5cfd --- /dev/null +++ b/group-anagrams/rivkode.java @@ -0,0 +1,87 @@ +/* +1. 문제 이해 +strs로 들어오는 인풋들에 대해 동일한 문자를 사용해서 대체할 수 있는지 체크 +대체할 수 있으면 하나의 그룹으로 묶어서 List 생성 +생성한 그룹들을 모아서 다시 하나의 2차원 리스트로 반환 + +2. 알고리즘 +2중 for loop인데 조건을 보니까 +탐색을 10^4 * 100 이면 10^6 이므로 1,000,000 이니까 +해볼만 한 것 같다. + +3. 구현 +각 글자들을 정렬해서 기존과 같은 인덱스를 가지는 hashmap 생성 + +글자가 같은지 비교 +같은 글자의 인덱스를 체크해서 기존 리스트에서 해당 글자를 넣음 +없으면 본인만 넣음 + +반환 + +아니다 .. +답지 참고하니 단순히 HashMap의 key value를 인덱스, 정렬된 단어가 아니라 +HashMap에서 key 로는 sorted 된 단어를 넣고 value 로는 List를 만들어서 일치하는 단어 리스트를 넣고 있네. + +이렇게 되면 한번만 for loop 를 도는것이므로 리스트에서 제거하거나 하는 일이 없어도 된다. +그리고 구현도 깔끔하게 그리고 이해하기 쉽게 구현된다. + +4. 예외 +없을 경우 본인 넣기 +글자는 소문자만 존재 + +*/ + +import java.util.*; + +class Solution { + public List> groupAnagrams(String[] strs) { + Map> anagrams = new HashMap<>(); + + for (int i=0; i()); + } + List list = anagrams.get(sorted); + list.add(w); + } + + return new ArrayList<>(anagrams.values()); + + // List originLst = new ArrayList<>(); + // Map hash = new HashMap<>(); + // List> answer = new ArrayList<>(); + + // for (int i=0; i tmp = new ArrayList<>(); + // String s = orderLst.get(i); + // // 정답에 넣기 + // tmp.add(originLst.get(i)); + // for (int j=i; j