티스토리 뷰

 

내장 메서드에 sort가 있었기 때문에 MDN 문서를 읽어주고 풀이했다.

 

function solution(num_list) {
    return num_list.sort((a, b) => a - b).slice(5);
}

 

가장 작은 5개의 수를 제외하기 위해 slice 메서드를 사용해주었다.

배열의 인덱스 5부터 끝까지 요소를 추출해주기 때문에, 그 나머지만 num_list에 남게 된다.

 

원본 배열이 바뀌는 성질을 이용하니 깔끔한 코드가 나왔다.


function solution(n_str) {
    return parseInt(n_str, 10); 
}

 

parseInt를 통해 문자열 인자를 파싱해줄 수 있다하여 사용했다.

두 번째 인자로 10을 넘겨주며, 10진수 정수로 변환할 수 있다.

 

근데 충격적인 코드가 있었으니...

const solution = Number

 

근데 이거 왜 되는걸까?

콘솔에 찍어보니까

이렇게 나오는데 하필 테스트코드가 전부 정수 문자열만 있었던걸까


 

이건 바로 조건문부터 생각났다.

function solution(angle) {
    if (angle > 0 && angle < 90) {
        return 1; 
    } else if (angle === 90) {
        return 2; 
    } else if (angle > 90 && angle < 180) {
        return 3; 
    } else if (angle === 180) {
        return 4; 
    }
}

 

근데 입출력에 대한 문제도 아니고 너무 간단한데

과연 이게 가장 베스트일까?

 

삼항연산자를 중복하는 것은 너무 어거지같고,

이중배열에 저장해볼까도 생각했는데

별다른 해결책을 찾지 못해서 정답을 제출해보았다.

 

근데 마침 두 생각에 가까운 해답들이 있었는데

function solution(angle) {
    return [0, 90, 91, 180].filter(x => angle>=x).length;
}

 

이건 진짜 쌈뽕한 문제 해결 같다.

lenth가 왜 붙어있냐면, angle이 배열의 기준점을 몇 개 넘었는지 세는 데 도움이 되기 때문이다.

 

이런 식으로 사용될 수 있구나.

 

또한, 삼항연산자도 중첩이 되는게 맞았다.

function solution(angle) {
    return angle < 90 ? 1 : angle === 90 ? 2 : angle < 180 ? 3 : 4;
}

 

이렇게 중첩할 수 있다는 것은 배웠으나,

코드가 정말 너무 길어지는게 아니라면 가독성은 좀 떨어지는 듯 싶다.


function solution(array) {
    array.sort((a, b) => a - b);
    const middleIndex = Math.floor(array.length / 2);
    return array[middleIndex];
}

중앙값을 찾기 위해 floor를 이용했다.

홀수여도 적용되는 결과이니, 그걸 바로 return해주었다.

 

다른 사람의 코드도 이 코드를 리팩토링한정도였다.

function solution(array) {
  return array.sort((a, b) => a - b)[Math.floor(array.length / 2)];
}

 

근데 가독성이 좀 떨어지는 것도 같아서 그떄그때 상황 봐가며 사용하면 될 것 같다.


 

이 코드 헤맸는데 생각보다 정답률 높아서 놀랐다.

그래서 내 나이를 대입해 생각해보았는데, 그냥 기준 날짜에서 나이를 빼면 되는거였다...

 

이게 문제를 조그맣게 떼어서 생각한다는 사고를 장착하는게 쉽지 않은 것 같다.

function solution(age) {
    const currentYear = 2022; 
    const birthYear = currentYear - age; 
    return birthYear;
}

 

근데 이게 안되길래 한참 봤다.

당연히 숫자인데 타입 문제도 아니고.

근데 조건 보니까 연나이 기준이라서...ㅎ

function solution(age) {
    return (2022 - age + 1);
}

설마 이게 되나했더니 되더라고...

기준이 2022년이라 소용 없었지만, 현재를 기준으로 하는거라면

new Date()를 사용할 수도 있을 것 같다.

 

Date.prototype.getFullYear() - JavaScript | MDN

getFullYear() 메서드는 주어진 날짜의 현지 시간 기준 연도를 반환합니다.

developer.mozilla.org


 

처음에는 당연히 replace 연산자를 떠올렸다.

function solution(rny_string) {
    return rny_string.replace("m", "rn");
}

 

근데...

 

이런 결과가 나와서 한참 서치해본 결과

정규표현식이란 것을 배웠다.

function solution(rny_string) {
    return rny_string.replace(/m/g, "rn");
}

 

알고보니 이 경우는 첫번째 문자열만 바꿔주기 때문이었던거다.

만약 replaceAll 메서드를 사용했다면 통과했을 것이다.

 

정규식은, 문자열 내의 모든 일치 항목을 한 번에 대체할 수 있기 때문에 사용하는 것이다.

/g는 전역 검색을 의미한다.

 

정규 표현식 - JavaScript | MDN

정규 표현식, 또는 정규식은 문자열에서 특정 문자 조합을 찾기 위한 패턴입니다. JavaScript에서는 정규 표현식도 객체로서, RegExp의 exec()와 test() 메서드를 사용할 수 있습니다. String의 match(), matchA

developer.mozilla.org

 

이걸 외워서 쓰나 궁금해서 여쭤봤는데 현직 개발자 분들은

그때그때 보면서 사용한다고...ㅎ

 

 

RegExr: Learn, Build, & Test RegEx

RegExr is an online tool to learn, build, & test Regular Expressions (RegEx / RegExp).

regexr.com

 

이 사이트가 제일 유명한듯하다.


 

보자마자 삼항연산자가 생각났다.

그리고 앞서 배운 것처럼 삼항연산자 중첩을 시작했다...ㅎ

function solution(myString) {
    return myString.split('').map(char => 
        char === 'a' ? 'A' : 
        char === 'A' ? 'A' : 
        char >= 'A' && char <= 'Z' ? char.toLowerCase() : char
    ).join('');
}

 

근데 훨씬 깔끔한 코드가 있었다.

일단 모두 소문자로 바꾼 다음에, a만 A로 변환해주면 되는거니까

const solution=s=>s.toLowerCase().replaceAll('a','A');

 

완전 깔끔 그 자체인 코드다.


 

이건 그냥 i--해서 하나씩 배열 안에 push해주면 될 것 같다.

function solution(start_num, end_num) {
    let answer = [];
    for (let i = start_num; i >= end_num; i--) {
        answer.push(i);
    }
    return answer;
}

 

다른 사람의 코드가 있긴 했는데, 내 기준에선 가독성이 좀 떨어지는 듯하다.

const solution = (start, end) => Array(start-end+1).fill(start).map((v,i)=>v-i);

 

배열을 생성한 다음에 모두 start로 채워준다.

그리고 map으로 배열을 돌면서 숫자를 하나씩 줄여주는 건데 조금 투머치한듯함!

댓글