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
List 를 활용하기 위해서는 생활코딩의 쉬운 설명을 습득하고 들어가면된다.
list 는 데이터의 손실을 막기도하고 순서(시퀀스)에 맞게 정립되어있는 배열이기 때문에 활용을 잘하면 효율적이다.
그리고 list의 배열을 전체 조회하려면 Iterator를 활용하고, for loop 나 while 로 조회가 가능하다.
https://hyeonstorage.tistory.com/208
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를 리턴시키면 된다.
테스틀 돌려보면 아래와 같이 답안이 나온다.
답안은 항상 그랬듯이 아래에~
'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 |