프로그래머스 Lv0. 문법정리

세나정·2023년 4월 29일
2

Lv0. #1

Array.reduce

[0, 1, 2, 3, 4].reduce(function(누적합, 현재값, 인덱스, 원본배열) {
  return 누적합 + 현재값;
}); // {} 뒤에 시작값을 정할 수 있음

배열의 값 두 배 만들기
numbers.reduce( (a, c) => [...a, c*2], [])

문자열속에서 배열만 자연수만 찾아 더하기
let str = 'A1b2c3d4e5a6'
// 자연수기 떄문에 양수만 취급, 즉 +a, +c
[...str].reduce( (a, c) => +a + +c : a, 0) // 삼항연산자를 통하여 숫자는 더하고 문자는 그대로

Str.split('구분자')

split() -> 길이1짜리 배열로 다 넣기
split("") -> 인덱스 한 개 씩 String의 길이만큼의 배열 생성
String.split("")= [...test]

Arr.join

join() -> 컴마로 구분하여 'h, e, l, l, o'
join("") -> 배열요소들이 한 문자열로 'hello'

Str.repeat(반복횟수);

만약 문자열의 각각을 여러번 반복하고 싶다면
my_string.split("").reduce( (a, c) => a + c.repeat(n), "")
c는 배열에 담겨있는 각 문자하나씩이니까

Arr,Str.includes("찾을값", 숫자)

.includes(찾을문자, 검색시작할곳)
"anc".includes("a", 2) // true

Str.replaceAll('바꿀문자', '바꿀값')

const str = 'dog dog my dog'
str.replaceAll("dog", "you") // you you my you

Arr.reverse()

let arr = ["h", "e", "l", "l", "o"] // ["o", "l", "l", "e", "h"]

Arr.filter

filter를 통한 모음제거
let str = 'aeiou'
Arr.filter( (v) => (!str.includes(v))).join("") // aeiou가 들어있지 않은 애들로만 모아주세요.

혹은 정규표현식을 사용해도 됨
my_string.replace(/[aeiou]/g, '');
각각 해당하는 애들만 다 ''로 바꿔줌

배열의 교집합

s1 ['a', 'b', 'c']
s2 ['a', 'b', 'c', 'd']
return s1.filter( v => s2.includes(v) )

Arr.splice(자를곳, 갯수, 바꿀값)

Arr.unshift, shift, push, pop

맨 마지막 인덱스 잘라서 앞에다가 넣기
Arr.unshift(Arr.pop())

맨 처음인덱스 빼서 마지막에 넣기
Arr.push(Arr.shift())

Arr,Str.indexOf(찾을값)

해당하는 인덱스를 반환 (indexOf관련은 따로 정리 해둔 곳 있음)

문자 -> 아스키코드 | 아스키코드 -> 문자

문자를 아스키코드로 -> 숫자.charCodeAt()
아스키코드를 유니코드로 -> String.fromCharCode(v)


Lv0. #2

숫자값을 배열로 전개연산자를 통해 배열로 바꿀 때

order = 29423
[...order+' '].filter( v => ['3', '6', '9'].includes(v))

얕은 복사와 깊은 복사

깊은 복사 (Deep copy) : 메모리 값을 직접 수정하느냐
얕은 복사 (Swallow copy) : 메모리 값을 가리킬 뿐이냐

test = Arr.sort( (a, b) => a-b) (깊은 복사)
test = [...Arr].sort( (a, b) => a-b) (얕은 복사)

정규표현식을 활용한 새로운 배열 생성

    // 1. 정규표현식을 사용해서 my_string의 숫자 부분을 발라낸다.
    // my_string이 "aAb1B2cC34oOp" 이라면 nums = [ '1', '2', '34' ]
    
	const nums = my_string.match([0-9]+/g);

한 번만 등장한 문자

s = 'abcabcadc'

    s.forEach((item) => {
        // 앞에서 부터 찾은 값과 뒤에서 부터 찾은 값이 같다는 것은 배열에서 "한 번만" 등장한다는 것
        if(s.indexOf(item) === s.lastIndexOf(item)){
            // 결과로 반환할 배열에 넣어주기
            return item
        }
    })

이진수 -> 십진수 & 십진수 -> 이진수

parseInt(이진수, 2)

십진수.toString(2)

Set을 통한 배열 중복제거

[...new Set(Arr)]

Number와 parseInt차이

let test = '10.12345';
parseInt(test); // 10
Number(test); // 10.12345

let test = '2020년도';
parseInt(test); // 2020
Number(test); // NaN

parseInt는 문자열로 된 부분에서 숫자만을 뽑아서 변환
Number는 문자열 전체가숫자일 때만 사용 가능

substring과 substr의 차이

substr은 앞 인덱스부터 몇 개를 빼겠다는 것이고 substring은 앞부터 뒤 인덱스 -1까지 빼겠다는 것

str="abcdefg"
substring(2, 4) -> "cd"
substr(2, 4) -> "cdef"

every와 some

every - 배열의 모든 요소가 콜백함수에서 true를 리턴해야 true를 리턴 하나라도 false가 떨어지면 false를 리턴

some - 배열의 요소 중 하나라도 콜백함수에서 ture를 리턴하면 treu를 리턴

    // includes를 통해 매치되는 애가 없으면 배열에 아무것도 들어가지 않으니 길이를 통해 삼항연산자
    return dic.filter( v => spell.every( c => v.includes(c) )).length ? 1 : 2

Map자료구조 : 객체와 비슷하지만 키에 여러가지 자료형이 들어갈 수 있음

Map

new Map() – 맵을 만듭니다.
map.set(key, value) – key를 이용해 value를 저장합니다.
map.get(key) – key에 해당하는 값을 반환합니다. key가 존재하지 않으면 undefined를 반환합니다.
map.has(key) – key가 존재하면 true, 존재하지 않으면 false를 반환합니다.
map.delete(key) – key에 해당하는 값을 삭제합니다.
map.clear() – 맵 안의 모든 요소를 제거합니다.
map.size – 요소의 개수를 반환합니다.

정수배열 등수매기기

내림차순으로 정렬하면 1등의 점수가 맨 앞으로서 인덱스가 0이 됨\

그 후 원본과 내림차순으로 정렬한 것을 비교하여 내림차순 정렬한 애의 인덱스에 +1씩을 해줌

    // 1. score의 평균 점수를 구한다.
  	let avg = score.map(v=>(v[0]+v[1])/2);
  	
  	// 2. avg를 내림차순으로 정렬한 배열 sort를 선언한다.
    
    let sorted = avg.slice().sort((a,b)=> b-a);

  	// 3. avg의 요소와 동일한 sorted 배열의 index 값에 1을 더한다.
    return avg.map(v => sorted.indexOf(v) + 1);

a와 b의 최대공약수 찾기

    maxNum = 0;
    for (let i = 1; i<= b; i++){
        if(a%i ===0 && b%i ===0) {
           maxNum = i;
        }
    }

sort의 심화버전

Arr = [1, 2, 3, 4, 5, 6]

특정수 ex) 4와 가까운 수부터 큰 순으로 정렬

function solution(numlist, n) {
	// 내림차순으로 먼저 정렬
    // 그 후 각 값들에서 n을 빼준 값이 작은 순으로 다시 오름차순 정렬 
    return numlist.sort((a,b)=>b-a).sort((a,b)=>Math.abs(a-n)-Math.abs(b-n))
}
profile
기록, 꺼내 쓸 수 있는 즐거움

0개의 댓글