본문 바로가기
[항해99] TIL

[항해99] 5일차(알고리즘1)

by @kkkk_biiin 2023. 8. 18.
728x90

 오늘부터 알고리즘 주차 시작!! 아직 문제 수준이 낮아서 그런가 문제를 푸는 게 재밌기만 하다.. 문제를 풀면서 '어떻게 하면 더 효율적으로 코드를 짤 수 있을까?'라는 고민을 계속하다 보니, 다양한 함수를 찾아보고 적용하게 되는 것 같다. 오늘 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)처럼 같은 수가 두 번 나온다. 이러한 원리를 이용해서 약수의 개수를 구한다면 효율적으로 코드 작성이 가능하다.

728x90