Code Signal -Arcade
코드시그널
아케이드 문제 관련 풀이들을 구글링하면서 찾아가는 일지를 하나씩하나씩 기록하고자 합니당.
주로 자바 위주로 풀이를 올릴예정이고, 추가로 공부하고 있는 파이썬이나 코틀린, GO, 자바스크립트 더 나아가 스위프트까지...
되는대로 가능한대로 구글링하고 정답맞추면 바로 패스!!
이런식으로 좋은 코드이든 말든 짜집기한 결과물들을 개인적 소장을 위해 기록합니다. ^^
참고 사이트들은 아래에 링크로 남겨둘터이니 자세하고 더욱 깊은 내용들은 링크로 들어가보세요!
Sort By Height
키를 정리해서 나열하라? 이런 의미이다. 문제를 볼까요.
문제를 읽어보면, 사람들이 공원에 서있고, 그 사이에는 나무들이 있다고 한다.
나무를 -1 이라고 했을때, 나머지 수들은 사람의 키이다. 사람들의 키를 오름차순으로 나열하되 나무의 위치는 변동이 없게 리턴해달라는 것이다.
언제나 그랬듯이 답안을 확인하겠지만, 먼저 example을 보면, -1을 제외한 100대의 숫자들이 input 에 들어있다.
그것을 -1을 제외하고 나머지 수들은 오름차순으로 정리해서 빼주면 된다.
즉, -1을 감지해 내거나 빼내고 나머지 키를 나타내는 숫자들을 다시 sort해서 넣어주거나 나열시켜주면 된다.
int[] sortByHeight(int[] a) {
List b = new Vector();
for(int i:a) if(i > -1) b.add(i);
Collections.sort(b);
Iterator it = b.iterator();
for(int i = 0, j = 0;i < a.length;i++){
if(a[i] > -1) a[i] = (Integer)it.next();
j++;
}
return a;
}
그렇지만 답안을 보면 vector()가 보인다.
https://programmers.co.kr/learn/courses/17/lessons/803
자바로 배우는 자료구조(with 생활코딩) - 리스트(List)의 개념 | 프로그래머스
리스트(List)의 개념 배열은 데이터를 그룹핑해서 다수의 데이터를 효율적으로 관리하는 데이터 스트럭쳐입니다. 배열의 가장 큰 특징은 인덱스가 있다는 점이지요. 이 인덱스는 데이터를 매우 빠르게 가져옵니다. 하지만 인덱스를 써 데이터를 가져오려면 각 데이터의 인덱스 값이 고정되어야 합니다. 또 어떤 엘리먼트를 삭제하면 삭제된 데이터가 있던 자리는 비워둬야 해 메모리가 낭비됩니다. 또 배열에 데이터가 있는지 없는지 항상 확인해야 합니다. 리스트는 배열의 장
programmers.co.kr
List 를 활용하기 위해서는 생활코딩의 쉬운 설명을 습득하고 들어가면된다.
list 는 데이터의 손실을 막기도하고 순서(시퀀스)에 맞게 정립되어있는 배열이기 때문에 활용을 잘하면 효율적이다.
그리고 list의 배열을 전체 조회하려면 Iterator를 활용하고, for loop 나 while 로 조회가 가능하다.
https://hyeonstorage.tistory.com/208
[JAVA] Vector 클래스 정리
Vector 클래스 정리 자바의 배열은 고정 길이를 사용한다. 즉, 배열이 한 번 생성되면 배열의 길이를 증가하거나 감소할 수 없다. [JAVA] Array 배열, 이중 배열, 다중 배열 사용자가 배열을 사용할 때 배열의 크..
hyeonstorage.tistory.com
vector에 대해서도 자세히 다루고 있다. 참고하면 좋을듯 하다.
위의 제가 주석을 달은 답안 코드입니다. 먼저 List b = new Vector(); 를 통해서 리스트를 하나 생성해줍니다.
그리고 for loop 를 통해서 input인 int[] a 의 모든 요소들 하나 하나를 각각 int i 에 다가 넣어주고 돌립니다.
그렇게 하면 조건문이 붙습니다. if 문을 보면 i가 -1 보다 크다는 조건이 있다.
if(i > -1) b.add(i); |
바로 이부분인데, 이 부분을 통해서 답지에서는 -1 을 걸러서 나머지 키를 나타내는 100자리대의 숫자들을 List b 에 하나씩 넣어주고 있는 것이다.
Collections . sort(b) ; |
그리고 collections. sort ( ) 를 활용해서 b에 들어가있는 키들을 오름차순으로 정리해준다.
System.out.println() 을 통해서 제대로 들어갔는지 확인해보는 것도 좋다.
그리고 나서 Iterator() 메서들 이용해서 리스트의 값들을 조회할수 있게 인덱스를 넣어준다. 그리고 나서
for 문을 통해서 기존의 입력값에다가 새롭게 정리되어있는 b의 값들을 -1 을 피해서 넣어준다.
그렇게 해서 다시 a를 리턴시키면 된다.
테스틀 돌려보면 아래와 같이 답안이 나온다.
답안은 항상 그랬듯이 아래에~
greenhelix/CodeFights-Arcade
Efficient Solutions to 100+ problems in CodeFights Arcade written in c++, python, java , c#, JavaScript - greenhelix/CodeFights-Arcade
github.com
'Algorithm > Java' 카테고리의 다른 글
#13_Code Signal Arcade >> Reverse In Parentheses (0) | 2019.11.07 |
---|---|
#11_Code Signal Arcade >> Is Lucky (0) | 2019.10.21 |
#10_Code Signal Arcade >> Common Character Count (0) | 2019.10.14 |