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

Dongchan Alex Kim·2023년 2월 3일
0

Today I Learned

목록 보기
30/31
post-thumbnail

1. 삼항연산자 + pop(), shift(), unshift(), push()

< Lv.0 배열 회전시키기>에서 다양한 방향으로 원소를 삽입하는 다양한 함수를 배웠다.
삼항연산자 안에 True케이스 와 False케이스를 나눠서 케이스마다 함수를 삽입할 수 있다.
→ 이 함수들은, 각 함수가 지정하는 위치의 요소를 변경한 후, 해당 요소를 반환한다.

function solution(numbers, direction) {
    direction === 'right' ? numbers.unshift(numbers.pop()) : numbers.push(numbers.shift());
    return numbers;
}

2. 오름차순 이용해서 만들기

< Lv.0 삼각형의 완성조건(1) > 에서 세 변의 길이를 따로 추출한 후, Max값으로 가장 긴 변의 인덱스를 따지는 것이 아니라,
배열 안의 요소를 오름차순으로 sort() 함수를 이용해 변환시킨 후, 그냥 가장 큰 긴 변의 길이를 첫번째 인덱스로 고정. (진짜 훨씬 간결해지는 사고)

function solution(sides) {
    sides = sides.sort((a,b) => a-b)
    return sides[0]+sides[1] > sides[2] ? 1 : 2;
}

3. filter 함수 한번더 깨우치다.

< Lv.0 머쓱이보다 키 큰 사람>< Lv.0 배열의 유사도 >에서 문제를 보면,
각 배열 안에 모든 항목을 돌면서, 조건에 맞는 것만 반환하는 filter 함수의 사용법을 배웠다.
→ 반복문으로 배열 안을 하나하나 돌아가면서 조건비교하는 것이 아닌, filter함수로 한 줄로 끝내버리자.

function solution(array, height) {
    var answer = array.filter(item => item > height);
    return answer.length;
}

function solution(s1, s2) {
    const intersection = s1.filter((x) => s2.includes(x));
    return intersection.length;
}

4. 구조분해+각각을 map을 사용해서 치환

< Lv.0 문자 반복 출력하기 >< Lv.0 숨어있는 숫자의 덧셈 >에서 쓰인 구조분해..
[...string] 을 이용해 문자열을 하나하나 분해해서 배열로 반환할 수 있다.
여기에 map() 매서드를 이용해 각 요소 값을 원하는 조건으로 치환할 수 있다.

function solution(my_string, n) {
    var answer = [...my_string].map(v => v.repeat(n)).join("");
    console.log(answer);
    return answer;
}

5. 인덱스 반환하는 .at()구문

.at()은 반환될 값의 인덱스를 받는다. 음수의 인덱스를 전달하면 배열 또는 문자열의 끝에서 계산해서 찾은 요소를 반환 하고 그렇지 않으면 undefined를 반환한다.

6. 정규표현식

파이썬 공부할 때도 항상 헷갈렸던게 정규표현식이었다..
정규표현식을 이용하면 특정 문자 제거할때 참 편하다. 이런건 두고 두고 써먹어야겠다
1. < Lv.0 모음제거 >

function solution(my_string) {
    return my_string.replace(/[aeiou]/g, ''); 
  //.replace(/[aeiou]/g, '') → replace 함수를 이용해, 모음만 다 검색해서, 빈칸으로 replace() !
}
  1. < Lv.0 문자열 정렬하기(1) >
function solution(my_string) {
    return my_string.match(/\d/g).sort((a, b) => a - b).map(n => Number(n));
  //.match(/\d/g) → 숫자 전역 검색하기.
}

7. 사고의 전환(뺄셈보단 나머지를 활용한 계산 생각해보기)

< Lv.0 개미군단 >을 보면 장군개미, 병정개미, 일개미 수의 최소값을 물어본다.
나는 그냥 장군개미가 hp를 넘지 않는 선에서 가장 많게, 그 남은 hp를 병정개미가 남은 hp를 넘지 않는 선에서 가장 많게, 나머지는 일개미... 이런식으로 생각했었다.
(무지하지만, 굉장히 일차원적인 생각이다. )
다른 사람이 푼 답을 통해, 사고의 전환을 하였다.나머지 값을 활용해서 짧게 풀이할 수 있다는 점을 배웠다.
나머지는 결국엔 뺄셈하고 남은 값이기 때문이다.

function solution(hp) {
    return Math.floor(hp/5)+Math.floor((hp%5)/3)+(hp%5)%3;
}

8. split함수의 ‘’의 중요성 + map()의 활용 다시한번 깨우치다

< Lv.0 대문자와 소문자 >

function solution(my_string) {
    return my_string.split('').map(x => x===x.toLowerCase() ? x.toUpperCase() : x.toLowerCase()).join('')
}

function solution(my_string) {
    let answer = []
    for(let i = 0; i < my_string.length; i++){
        if([...my_string][i] == [...my_string.toLowerCase()][i]){
            answer.push([...my_string][i].toUpperCase())
        }else{
            answer.push([...my_string][i].toLowerCase())
        }
    }
    return answer.join('')
}
profile
Disciplined, Be systemic

0개의 댓글