Monday, March 18, 2019

2019년을 시작하며


2019년도에 내 머리속에 공부해야한다라고 생각하는것들 우선순위를 정해야겠다.
실력은 부족한데, 욕심은 많고 시간은 부족하니 마음만 급하다. ㅎ

1. React, Redux,
  - reactive 한 client 환경에 적응을 해야한다.
2. 블록체인?
 - 이거는 과감히 버려야겠다.
3. 머신러닝
 - 여기는 내 분야가 아닌걸로
4. MongoDB
 - 문서화를 진행하고, 조금더 개념적으로 깊게 접근 한다.
5. Spark
 - 현재 사용하고 있는 batch 서비스를 spark 로 전환한다.
6. Hadoop
 - 하둡을 시작한다. Just beginner
7. 수학
 - 기초 정수론 독학한다.
 - 이산수학 독학
8. Kafka
 -  이것도 해야하는데
9. Reactor
 - 이것도
10. leetcode, Project Euler 문제 풀이

다시 정리하자면   하고싶은거와 해야하는거를 두가지로 나누어 본다면 아래와 같다

하고 싶은거
7. 수학
 - 기초 정수론 독학한다.
 - 이산수학 독학
10. leetcode, Project euler 문제 풀이


해야하는거
1. React, Redux,
4. MongoDB
5. Spark
6. Hadoop
8. Kafka

하고 싶은거는 집에서 1-2시간씩 일정을 잡고 하면 될것 같고

해야하는거는 업무와 상관있기때문에
회사에서 시간을 내서 공부를 해야겠다.

2019년 크리스마스때, 한해를 마무리할때 오늘 정리했던 모든것들을 다 이루기를 바라며
희망해본다.

Wednesday, March 6, 2019

problem 304 Primonacci

거의 3년만에 올일러 문제가 풀렸다 ㅠ 드뎌 200문제를 풀었고 level은 8로 올랐다.
이 문제도 4일걸려서 풀었는데 계속 풀어야할지 의문이긴하다 .ㅎ

It took 4 days to solve this problem. 

finally I solved 200 problems in proejct euler ^^ 

https://projecteuler.net/problem=304

hint : 
 remainder

 x mod a + x mod b ==x mod a + b


Monday, March 4, 2019

이번주 문제 https://projecteuler.net/problem=425 프라임 숫자와, 관련해서 공부해보자

이번주 문제 https://projecteuler.net/problem=425 프라임 숫자와, 관련해서 공부해보자

1004. Max Consecutive Ones III

1004. Max Consecutive Ones III

처음 풀이 N^2

Runtime: 1000+ ms, faster than 100.00% of Java online submissions for Max Consecutive Ones III.

최적화 풀이 2N

Runtime: 7 ms, faster than 100.00% of Java online submissions for Max Consecutive Ones III.

풀이 방법

start 와 end 2개의 포지션을 가지고 구한다.

start 와 end 사이의 0 개수가 k 보다 적을때
-> end index를 늘림

회고

  • 코드 if연산을 조금더 깔끔하게 할 수 있을것 같은데 쉽지가 않네
class Solution {
    public int longestOnes(int[] A, int K) {
       int zeroCount = 0;
        int max = 0;
        int startIndex = 0;

        for(int i=0; i<A.length; i++){
            if(A[i] == 1 ){
                max = Math.max(i+1 - startIndex, max) ;
                continue;
            }else {
                if(++zeroCount > K){                    
                
                    max = Math.max(i - startIndex, max) ;
                    sub:
                    for(; startIndex<=i; startIndex++){
                        if(A[startIndex] == 0){
                            zeroCount--;
                            startIndex++;
                            break sub;
                        }
                    }
                }
            }
        }
        max = Math.max(A.length - startIndex, max) ;
        return max;
    }
}

Monday, January 7, 2019

34. Find First and Last Position of Element in Sorted Array Medium

34. Find First and Last Position of Element in Sorted Array Medium

문제 링크

https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/
두단계로 끊어서 생각
시간 복잡도는 O(log n) 인것 같은데 이상하게 느리네 ;;
Runtime: 6 ms, faster than 37.73% of Java online submissions for Find First and Last Position of Element in Sorted Array.

1단계

  • binary search를 탐색하는거를 만들고
  • 로그를 출력하면서 잘 탐색을 하는지 확인
 public void find(int start, int end, int[] nums) {
  if (end <= start) {
   return;
  }

  int mid = start + (end - start) / 2;
  System.out.println(mid);
  // lef
  find(start, mid, nums);
  // right
  find(mid + 1, end, nums);
 }

// output  ex) new int[]{1,2,3,4,5,6,7}
/**  
3
1
0
2
5
4
6
**/

2단계

  • 1단계를 응용해서 변경
public class FindFirstLast {
 int low = Integer.MAX_VALUE;
 int max = Integer.MIN_VALUE;
 
 public int[] searchRange(int[] nums, int target) {
  
  find(0, nums.length, nums, target);
  
  if(low != Integer.MAX_VALUE){
   return new int[]{low, max};
  }else{
   return new int[]{-1, -1}; 
  }
  
    }
 
 public void find(int start, int end, int[] nums, int target){
  if(end <= start){
   return;
  }  
  
  int mid = start + (end - start)/2; 
//  System.out.println(mid);
  
  if(nums[mid] == target){
   low = Math.min(mid, low);
   max = Math.max(mid, max);
   if(start < low){
    find(start, mid, nums, target); 
   }
   
   if(end > max){
    find(mid+1, end, nums, target); 
   }    
      
  }else if(nums[mid] < target){
   find(mid+1, end, nums, target); 
  }else if(nums[mid] > target){
   find(start, mid, nums, target); 
  }
  
 }
 
 public static void main(String args[]){
  new FindFirstLast().searchRange(new int[]{1,2,3,4,5,6,7,8}, 5);
 }
 

}
Written with StackEdit.

Saturday, December 29, 2018

I solved all intro problem in codesignal~

I solved all codesignal problem in intro,

next I will try graph arcade. I think graph problem is more difficult than intro.



Wednesday, December 26, 2018

395. Longest Substring with At Least K Repeating Characters

395. Longest Substring with At Least K Repeating Characters

문제

https://leetcode.com/problems/longest-substring-with-at-least-k-repeating-characters/

풀이 사고

  • k보다 적은 카운트의 경우 k위치를 기준으로 자른다음 재귀로 문제 접근
  • ex ) ababcaaad k=2
    • 전체의 카운트
      • a = 5, b=2, c=1; d=1 즉 k보다 작은게 존재하면 작은 캐릭터 기준으로 자른다
      • c 와 d 를 콤마(,)로 치환
      • abab,aaa,
      • , 를 기준으로 split한후 다시 자른 String으로 반복로직 구현

Runtime: 3 ms, faster than 77.01% of Java online submissions for Longest Substring with At Least K Repeating Characters.

class Solution {
    int max;

    public int longestSubstring(String s, int k) {
        max =0;

        if(k>s.length()){return 0;}
        findMax(s, k);
        return max;
    }

    public void findMax(String s, int k){
        int arr[] = new int['z' - 'a' +1];

        // setting
        for(int i=0; i<s.length(); i++){
            int index = s.charAt(i) -'a';
            arr[index]++;
        }

        // 전부다 k보다 더 큰 수가 나오는 경우는 max값을 갱신
        if(allEqualOrBigger(arr, k)){
           max = Math.max(max, s.length());
        }else{
            char[] str= new char[s.length()];
            for(int i=0; i<s.length(); i++){
                int index = s.charAt(i) -'a';

                if(arr[index] == 0 ){
                    continue;
                }else if(arr[index] >=k){ //
                    str[i] = s.charAt(i);
                }else{
                    str[i] = ',';
                }
            }
            String[] subs = new String(str).split(",");
            for(int i=0; i<subs.length; i++){
                if(subs[i].length() <= max){
                    continue;
                }
                findMax(subs[i], k);
            }
        }
    }

    public boolean allEqualOrBigger(int arr[], int k){
        for(int i=0; i< arr.length; i++){
            if(arr[i] >0 && arr[i]<k){
                return false;
            }
        }
        return true;
    }
}