오늘부터 알고리즘 주차 시작!! 아직 문제 수준이 낮아서 그런가 문제를 푸는 게 재밌기만 하다.. 문제를 풀면서 '어떻게 하면 더 효율적으로 코드를 짤 수 있을까?'라는 고민을 계속하다 보니, 다양한 함수를 찾아보고 적용하게 되는 것 같다. 오늘 TIL에서는 지금까지 사용하지 않았던 함수들에 대해 작성해보고자 한다.
정수 내림차순 정렬하기
function solution(n) {
var answer = 0;
n = String(n)
n = n.split("") //문자열을 배열로 나눈다
n = n.sort().reverse()
n = n.join("") // 배열을 다시 문자열로 합친다
return Number(n);
}
문제를 풀 때 나는 리스트 변수를 새로 만들고 두 개의 for문을 돌리면서 문제를 풀었다. 문제를 다 풀고나서도, 조금 더 효율적으로 코드를 짤 수 있는 방법을 고민하던 중 다른 사람이 푼 방법을 보게 되었다. 위의 코드가 그 코드인데, 이걸 보고 감탄을 했다.. 이렇게 쉽게 짤 수 있다니... 알고리즘 문제를 풀면서 반복문과 조건문을 무조건 사용해야 된다는 강박(?)을 좀 덜게 되었다고 해야 되나..
indexOf('찾고자 하는 값', 인덱스 시작위치)
var index = seoul.indexOf("Kim", 0)
정수의 내림차순, 오름차순 정렬
answer = answer.sort(function(comp1, comp2){
return comp1 - comp2
})
처음에 단순히 .sort()를 사용했는데 정렬이 잘 되지 않았다. 그 이유를 알아보니 정수도 문자열처럼(?) 인식하기 때문이었다. 위의 코드는 정수를 정렬할 때 사용하는 코드이다.
문자열 나누기
var fNum = phone_number.slice(0, -4).replace(/[0-9]/gi, "*")
var bNum = phone_number.substr(-4)
문자열을 나누는 여러 가지 함수들은 계속 사용해도 많이 헷갈리다.. 위의 코드는 특정 문자열을 다른 문자열로 바꾸는 코드인데, 정규식을 활용했다.
fillter 함수
answer = arr.filter((element) =>element!== min)
알고리즘 문제를 풀면서 가장 많이 친숙해진 코드
정수와 실수를 구분하는 코드
// idx가 정수면 true, 실수면 false
Number.isInteger(idx) === true
약수의 개수
function solution(left, right) {
var answer = 0;
for(let num=left; num<=right; num++){
if(Math.sqrt(num) % 1 === 0) {
answer -= num;
} else {
answer += num;
}
}
return answer;
}
1, 4, 9, 16과 같이 완전제곱수는 곱할 때 쌍의 한 값이 반복되기 때문에 약수가 무조건 홀수가 된다. 예를 들어 10의 경우 (1,10), (2,5)처럼 짝이 딱딱 맞지만 9의 경우 (1,9), (3,3)처럼 같은 수가 두 번 나온다. 이러한 원리를 이용해서 약수의 개수를 구한다면 효율적으로 코드 작성이 가능하다.
'[항해99] TIL' 카테고리의 다른 글
2주차 WIL(ES6 문법) (0) | 2023.08.22 |
---|---|
[항해99] 6일차(알고리즘2) (0) | 2023.08.19 |
[항해99] 4일차(ES6, 일급 객체로서 함수, 실행 컨텍스트, 콜백 함수) (0) | 2023.08.18 |
[항해99] 3일차(DOM, Callback, Class) (0) | 2023.08.16 |
[항해99] 2일차(호이스팅, 실행 컨텍스트, This, 유사배열) (0) | 2023.08.16 |