반응형
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의 적용사례를 보고 사용처를 잊고 있었던 메소드를 기억할 수 있었음
(메서드는 문자열에서 특정 위치에서 시작하여 특정 문자 수 만큼의 문자들을 반환합니다.)
삼항연산자의 적용으로 코드의 단축
반응형
'개인공부' 카테고리의 다른 글
2021년 6월 5일 cmarket 리덕스 스프린트를 위한 redux 흡수하기(뇌피셜 + 튜토리얼/ 공식문서 훑어보기) (0) | 2021.06.05 |
---|---|
2021년 5월 22일 프로그래머스(약수의 개수와 덧셈) (0) | 2021.05.22 |
2021년 5월 9일 클래스를 이용한 모듈화, 프로토 타입 예습 (0) | 2021.05.09 |
2021년 4월 25일 TIL(호이스팅(Hoisting), spread/rest) (0) | 2021.04.25 |
2021년 4월 24일 TIL(koans 복습, 깊은 고찰: arguments.callee, 부족한 점 ) (0) | 2021.04.24 |