본문 바로가기

개인공부

2021년 5월 19일 프로그래머스(가운데 글자 가져오기, K번째수)

반응형

K번째수

 

//내가 작성한 코드

function solution(array, commands) {
    var answer = [];
    for(let i = 0; i < commands.length; i ++){
        answer.push(array.slice(commands[i][0]-1, commands[i][1]).sort(function(a, b) {return a - b;})[commands[i][2]-1]); 
    }
    return answer;
}

어려운 문제는 아니지만 얼마나 효율적으로 풀 수 있냐를 판단하는 문제라고 생각했다.  

 

효율적인면에서 그리고 제 3자가 보기에 최악의 코드로 문제를 풀어냈다.

 

통과는 했지만..이게 무슨 의미가 있나 싶다.

 

다른 사람이 쓴 코드를 보고 현타가 왔다.

 

function solution(array, commands) {
    return commands.map(command => { 
    //map을 사용함으로써 반복문의 사용 + 빈배열에 push하는 과정을 생략할 수 있었다.
        const [sPosition, ePosition, position] = command 
        //map을 사용함으로써 commands 배열의 각각 요소에 접근할 수 있었고 
        //구조분해할당을 통해 command의 각각의 요소를 변수에 저장해 이를 아래 filter과정에서 활용하였다. 
        const newArray = array
            .filter((value, fIndex) => fIndex >= sPosition - 1 && fIndex <= ePosition - 1)
            //boolean을 반환하는 callback함수의 두번째 매개변수(filter의 대상이 되는 배열 속 ele의 index)을 이용하여 filter하였고
            .sort((a,b) => a - b)    
			//이를 sort하여 정렬하였다. 
        return newArray[position - 1]
    })
}

배운 점

알고리즘 문제를 풀며 단 한번도 생각하지 못한 구조분해 할당의 실 사용예를 봤다는 점.
filter의 callback함수에서 두번째 매개변수를 이용하면 index에 접근할 수 있다는 점.

 

 

 

가운데 글자 가져오기

 

//내가 작성한 코드

function solution(s) {
    //홀수의 경우 5글자일때 3번째가 나왔으면 
    //5+1 / 2 => 의 인덱스에 가면 되지 않을까?
    //짝수의 경우 string의 length / 2와 length / 2 -1 같이 출력되면 안될까? 라는 생각
    
    if(s.length % 2 !== 0){
        var answer = s[((s.length + 1) / 2)-1];   
    }else{
        var answer = s[(s.length / 2) - 1] + s[(s.length / 2)];
    }
    return answer;
}

문제 해결의 컨셉 자체에서는 빗나가지 않았지만 코드의 길이 측면, 적절한 메소드의 사용 여부에서 차이가 있었다.

function solution(s) {
    return s.substr(Math.ceil(s.length / 2) - 1, s.length % 2 === 0 ? 2 : 1);
}

배운 점

substr의 적용사례를 보고 사용처를 잊고 있었던 메소드를 기억할 수 있었음
(메서드는 문자열에서 특정 위치에서 시작하여 특정 문자 수 만큼의 문자들을 반환합니다.)
삼항연산자의 적용으로 코드의 단축
반응형