greenhelix
greenhelix
greenhelix
06-20 15:27
  • All (229)
    • Algorithm (118)
      • Algorithm (17)
      • Graph (0)
      • Core (6)
      • Python (18)
      • PythonSnippet (4)
      • Java (59)
      • Kotlin (14)
    • Project (0)
    • Study (8)
      • License (5)
      • EIP (3)
    • Programming (63)
      • Android (41)
      • Flutter (1)
      • Bugs Life (21)
      • Linux (0)
    • Tech (32)
      • Tech (17)
      • Drone (4)
      • Hacking (11)
    • Life (6)
      • INGRESS (1)
      • 심시티빌드잇 (0)
250x250

티스토리

hELLO · Designed By 정상우.
greenhelix

greenhelix

#34_Code Signal Arcade >> Extract Each Kth
Algorithm/Java

#34_Code Signal Arcade >> Extract Each Kth

2020. 1. 30. 23:59

Code Signal -Arcade

코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당. 

주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...

되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요! \


Extract Each Kth

각 K번째 것들을 빼내라?

 

읏흠.. 문제를 볼까요?

예시를 보면 이해가 됩니다. 주어진 배열이 있고, k의 값의 배수들 위치!에 해당되는 수들을 제거하라는 문제입니다. 

 

답을 볼께요. 

int[] extractEachKth(int[] inputArray, int k) {
//k배수 자리의 배열 요소를 제거하라. 
     
    int j = k-1;                                //배수를 표현해줄 int선언
    int x = 1;                                  //배수를 진행해줄 값
    int y =0;                                   //마지막 배열로 바꿀때, 배열크기가 되줄 값 선언
    
    ArrayList<Integer> hey = new ArrayList<>(); // int형 선언과 동시에 list선언. 
    
    for(int a : inputArray){hey.add(a);}        // list에 array값 넣기. 

    for(int i=0 ; i < hey.size(); i++){         //배수 자리 제거    
       
       if(i == j && i>0){
           
           hey.remove(i);
           x++;
           j = (k-1)*x;
           
       }else if(j == 0 ){
           hey.clear();
       }                    
    }
    int [] out = new int[hey.size()];            //list 를 array로 변환
    
    for(int last : hey){
        out[y++] = last; 
    }

    return out;
}

 

약간 고수들 따라해볼라고 좀 간단하게 변수들을 선언해주고 들어갔습니다. 

그리고, 값을 빼고 앞으로 땡겨주는 걸로는 list가 짱이죠? 그래서 선언. 

int j = k-1;                                //배수를 표현해줄 int선언
int x = 1;                                  //배수를 진행해줄 값
int y =0;                                   //마지막 배열로 바꿀때, 배열크기가 되줄 값 선언
ArrayList<Integer> hey = new ArrayList<>(); 

이렇게 해준다음

반복문을 통해 일단 inputarray값을 hey라는 리스트 안에 넣어줄께요. 빠바박

그리고 또 반복문을 통해서 배수 위치의 수들을 제거. 

  for(int i=0 ; i < hey.size(); i++){         //배수 자리 제거    
       
       if(i == j && i>0){
           
           hey.remove(i);
           x++;
           j = (k-1)*x;
           
       }else if(j == 0 ){
           hey.clear();
       }                    
    }

list의 사이즈로 설정해주고, if문을 통해서, j = k-1이니깐, i와 일치하는 경우 그 자릿수를 제거!! 왜 k-1인지는 대충 감이 오시죠? index값이 한자리씩 작으니깐 그렇죠 뭐 

그렇게 편안하게  remove()를 통해서 제거제거~~ 그리고 j를 다시 설정해줄 필요가 있죠잉

왜냐하면 우리는 위치를 찾는 거니깐 j가 고정되면 안되니깐요. 그래서 k-1 에다가 그대로 x를 ++해준뒤 곱해주면 자연스럽게 그 배수들이 j로 선언이 됩니다. 그러면 끝. 

혹여나, j = 0인 경우는 test2 를 보시면 이해됩니다. 

 바로 이런경우인데요. 

예시와 같이 1인경우 j는 0이 되버림. 

어차피 답없으니깐요. list를 깨끗히 비워줘야겠죠?

그럴때, clear()를 사용합니다. 

 

 

자 이제 완료 되었죠. 뭔가 더 쉬운 방법이 있는듯 하지만, 전 노가다로 다시 array에다가 넣어주겠습니다. 

배열 하나 선언해준뒤, 반복문을 통해 hey값을 쭈욱 넣어줍니다. 

 

  int [] out = new int[hey.size()];            //list 를 array로 변환
    
    for(int last : hey){
        out[y++] = last; 
    }

자 이렇게 return out하면 끝! 

 

어떠세요 이해가 되시나요? 매우 직관적이라 이해되실거라 믿습니다. ㅎㅎ


엘리트분들의 ㅋ 더 좋은 방법을 알아볼까요? 

JAVA

int[] extractEachKth(int[] inputArray, int k) {
    return IntStream.range(0, inputArray.length).filter(i -> ((i + 1) % k) != 0).map(i -> inputArray[i]).toArray();
}

역시나 깔끔하구요~ filter를 통해서 걸러주고, map()을 통해 다시 inputarray에 넣어주는 건가보네요. 신기합니다.

 

Python3

def extractEachKth(inputArray, k):
    del inputArray[k-1::k]
    return inputArray

역시 파이썬. 위에 사용된 배열 방법에 대해 잘 설명된 곳을 찾았습니다. 참고하세요. (저도 마찬가지) 

https://blog.wonkyunglee.io/3  

 

[Tip] Python Array[::] 사용법

Python array[::] 용법 간단한 파이썬 팁입니다. arr[::], arr[1:2:3], arr[::-1] 등으로 배열의 index에 접근하는 방법을 Extended Slices 라고 부릅니다. 설명 arr[A:B:C]의 의미는, index A 부터 index B 까지..

blog.wonkyunglee.io

JS

function extractEachKth(inputArray, k) {
    return inputArray.filter((x, i) => (i+1) % k)}

js 는 역시 자바랑 비슷하군요. 간결하네요. 

 

 

공감 버튼 눌러주시면 더욱 많은 포스팅을 올리는데 힘이 됩니다!

부탁드려요 돈드는거 아니잖아요~

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Algorithm > Java' 카테고리의 다른 글

#35_Code Signal Arcade >> First Digit  (0) 2020.02.19
#33_Code Signal Arcade >> Strings Rearrangement  (0) 2020.01.14
#32_Code Signal Arcade >> Absolute Values Sum Minimization  (0) 2020.01.12
    'Algorithm/Java' 카테고리의 다른 글
    • #36_Code Signal Arcade >> Different Symbols Naive
    • #35_Code Signal Arcade >> First Digit
    • #33_Code Signal Arcade >> Strings Rearrangement
    • #32_Code Signal Arcade >> Absolute Values Sum Minimization
    greenhelix
    greenhelix
    개발에 관한 것들과 개인적인 것을 담는 블로그

    티스토리툴바