오늘은 코드카타 문제를 2개 풀었다. 어려운 문제였으면 하루에 1개씩만 풀었으니 오늘 2개를 풀었다는 것은 쉬운 문제였다는 뜻이지만, 새로 배운 코드들을 정리해야 할 필요성을 느꼈기 때문에 글을 작성한다.
먼저 indexOf는 문자열의 값을 이용하여 위치를 찾아주는 함수이다. indexOf('Kim')과 같이 매개변수로 배열의 값을 넣어주면 해당 원소의 위치를 찾아준다. 여기서 원소의 위치는 0부터 세며, 만약 문자열에 매개변수의 값이 여러 개 존재할 경우 첫번째 원소의 위치만을 반환한다. 찾는 문자열이 없으면 -1을 반환한다. 이번에 코드카타 문제는 배열로 제시되었지만 단순 문자열이라도 이 함수를 사용할 수 있다고 한다.
예)['June','Kim'].indexOf('Kim') = 1
활용하자면 lastIndexOf는 이 함수와 다르게 뒤에서부터 번호를 세고, 만약 indexOf('Kim', 3)과 같이 매개변수를 추가하면 원소를 0에서부터 순서대로 세어서 4번째 원소에서부터 'Kim'을 찾는다. 만약 Kim이 2번째 원소에 있으면 -1을, 5번째 원소에 있으면 4를 반환하는 식이다.
다음은 sort()를 풀어쓰겠다. sort는 배열의 원소를 오름차순으로 정렬하는 함수이다. 다만 sort()을 통해 정렬되는 것은 한자리 원소이기 때문에 (5, 10)과 같은 두 자리 원소가 포함된 배열을 정렬하기 위해서는 함수를 추가해주어야 한다. 나는 삼항연산자를 이용하여
answer.sort((a,b)=>(a-b)>0? 1 : -1)
이와 같이 answer 배열의 원소들을 오름차순으로 정렬했다. a가 b보다 크면 1을 그렇지 않으면 -1을 반환하는 것을 통해 원소 내의 수의 값들을 서로 비교하여 큰 수는 sort에 의해 뒤쪽에 배치되고 작은 수는 앞에 배치되도록 하는 것이다. 또 이러한 오름차순 구조는 삼항연산자가 아닌 (a,b)=>(a-b)를 통해서도 구현이 된다. 또한 굳이 1, -1이 아니라
((a,b)=>(a-b)>0? 2 : -2)를 사용해도 된다.
또 오름차순이 아니라 내림차순 정렬을 원한다면 (a-b)에서의 a와 b의 위치를 바꾸어서 (a,b)=>(b-a) 를 통해 (a,b)의 순서를 역전시킬 수 있고, 결과적으로 내림차순 정렬로 만들 수 있다.
원래 (a,b)=>(a-b) 는 a가 더 크면 양수를 반환하지만
(a,b)=>(b-a) 에서는 a가 더 크면 음수를 반환하기 때문이다.
'배운 코드 정리' 카테고리의 다른 글
발행자/구독자 패턴 (0) | 2024.09.11 |
---|---|
min, splice, filter, apply (0) | 2024.07.11 |
돌아온 정수 제곱근 판별 (0) | 2024.07.02 |
자연수 뒤집기 (0) | 2024.07.01 |
배열의 평균 값 (0) | 2024.06.21 |