2023.01.30.Programmers 코딩테스트 Lv.0 회고록 TIL

Dongchan Alex Kim·2023년 1월 31일
0

Today I Learned

목록 보기
31/31
post-thumbnail

1. NewDate.getFullyears()

< Lv.0 나이출력 문제 > 에서 기준이 되었던 건 2022년이었다.
여기서 문제출제의도는 2022를 넣기보다는,
'나이'라는 점을 감안했을 때, 현재년도를 불러오는 매소드를 원했다고 되짚어 볼 수 있었다.

function getToday(){
	let date = new Date();
  	let year = date.getFullYear();
}

2. 삼항연산자

< Lv.0 각도기 문제 >에서 그냥 조건문으로 각 값을 return하면 그만이었다.
역시나 세상에는 날고 기는 사람들이 많다.
같은 문제도 다양하고 시각으로 다르게 접근하는데,
그 중 하나가 삼항연산자였다.

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

3. 생각의 반전

< Lv.0 짝수의 합 문제 >에서
나는 당연히 for문으로 당연히 두 숫자씩 건너서 추출한다는 생각을 했지만,
이 문제 역시 다른 사람이 푼 답안을 보니 참 배울 점이 많았다.
문제의 의도를 수열을 이용해서 푼 것이다.

function solution(n) {
    let half = Math.floor(n/2);
    return half*(half+1);
}

4. arr.reduce() 함수

자바스크립트의 reduce함수는 배열의 각 요소를 순회하며 callback함수의 실행 값을 누적하여 하나의 결과값을 반환한다.

for문으로 하나 하나를 반복하는 식보다는
reduce함수를 이용해서 각 요소를 순회하며, 더해주는 식의 방법이 코드의 퀄리티 자체가 달랐다.

function solution(numbers) {
    let answer = 0
    for(let i = 0; i<numbers.length; i++){
        answer += numbers[i]
    }
    answer = (answer/numbers.length).toFixed(2);
    return answer;
}
function solution(numbers) {
    let answer = numbers.reduce((a,b) => a+b, 0) / numbers.length;
    return answer;
}

5. 비구조 할당

< Lv.0 점의 위치 구하기 문제 >에서 나는,
x에 할당된 값과 y에 할당된 값의 각각의 부호를 판별하여 4가지 케이스로 각각 값을 도출했다.

function solution(dot) {
    if(Math.sign(dot[0])==1 && Math.sign(dot[1])==1){
        return 1
    } else if(Math.sign(dot[0])==-1 && Math.sign(dot[1])==1){
        return 2
    } else if(Math.sign(dot[0])==1 && Math.sign(dot[1])==-1){
        return 4
    } else{
        return 3
    }
}

구조할당을 통해 각 위치 값을 따로 할당을 받은 후,
삼항연산자를 이용해 True 값 or False 값 그리고, x값의 양/음수 케이스를 나눠서 조건식을 마무리한다.

function solution(dot) {
    const [num,num2] = dot;
    const check = num * num2 > 0;
    return num > 0 ? (check ? 1 : 4) : (check ? 3 : 2);
}
이 얼마나 깔끔한 풀이이겠는가....ㄸㄹㄹ

6. map 함수

var numbers = [4,9,16,25,36];
var result = numbers.map(Math.sqrt);
console.log(result);

//[ 2, 3, 4, 5, 6 ]

이런 식으로 배열을 순회하면서 추가적인 명령을 실행한다.

7. filter 함수

특정 조건을 만족하는 요소들만 들고 와서 새로운 배열을 생성한다.
이 문제의 각도라는 기준을 범위설정의 시각이 아닌,
범위 '기준값'이라는 시각으로 접근해 filter 함수를 이용해 한 줄로 마무리하였다.

function solution(angle) {
    return [0, 90, 91, 180].filter(x => angle>=x).length;
}
// 각 기준이 되는 값들을 가져와, 주어진 input보다 작은 기준값들을 모두 불러와 
// 이 값의 length로 값을 정의하는 방식이다.

8. split 함수의 또 다른 목적 + replaceALL()

보통 split함수는 문자열에서 특정 값을 기준으로 나누어 값을 받을 때 사용한다.
< Lv.0 특정 문자 제거하기 문제 > 에서 이 split()함수를 정말 다른 시각으로 사용할 수 있었다.
이 문제에서 가장 걸리는 조건은, 같은 문자가 여러번 있을 경우였다.
for문을 돌리기에는 너무 복잡해져 중간에 에러가 계속 났고,
그래서 나는 그 문자 빼고 따로 리스트에 넣어 합치는 방식을 택했었다.

그러나 split함수를 이용해 '주어진 문자 기준'으로 타문자들을 분리한 후 (주어진 문자는 자동 삭제) 다시 join함수를 이용해 합치는 방법으로 한줄로 끝내버릴 수 있는 것이다.

function solution(my_string, letter) {
    const answer = my_string.split(letter).join('')
    return answer;
}

혹은,
replaceALL()함수를 이용해 여러 번 출현하는 문자를 모두 빈 문자로 바꾸는 방법도 생각해볼 수 있겠다.

function solution(my_string, letter) {
    return my_string.replaceAll(letter, "");
}
profile
Disciplined, Be systemic

0개의 댓글