[DAY11] Today I Learned

1nxeo·2023년 2월 16일

항해99

목록 보기
11/63
post-thumbnail

1. 정규표현식 : 외우진 않아도 되고 필요할때 검색해서 쓰면됨

문자열 다루기 기본

끝에 g를 붙여주면 전부 적용하겠다

2. 문자열에 공백 추가하기

이건 HTML용이었다...... 내가알고싶은건 아니었지만 그래도 유용해서 정리.
var text = document.createTextNode("\u00a0");
\u00a0은 유니코드상 공백.. --> 이스케이프시퀀스(pg#63)

1칸 :  
2칸 :  
3칸 :  

가 아니고 그냥 문자열 안에서 공백 넣어줬더니 됨...... 허탈

answer = "김서방은 " + location +"에 " +"있다"

표현식 삽입
: 문자열은 연산자 + 를 사용해 연결할 수 있다. +연산자는 피연산자중 하나 이상이 문자열인 경우 문자열 연결 연산자로 동작한다. 그 외의 경우는 덧셈 연산자로 동작한다.
: 표현식을 삽입하려면 ${}으로 표현식을 감싼다. 이 때 표현식의 평가 결과가 문자열이 아니더라도 문자열로 타입이 강제 변환되어 삽입된다.
ex) ${name}처럼 사용하거나,

console.log(`1 + 2 = ${1 + 2}`);		//1 + 2 = 3

이렇게 !

3. 문자열 반복 에서 글자기준으로 반복하기 - 프로그래머스 수박수박수박수박...

repeat 안쓰면 어떻게 할 수 있나
repeat 사용하지 않는 이유 : arr.repeat(2.5) 라고 하면 2번만 반복함...
근데그럼 '수박수박수'같은 형태가 나올 수가 없어..
아니면 split 써서 반복을 ........그게되나 ?
하여튼

function solution(n) {
    let answer = '';
    let word = "수박"
    
    if (n%2 ==0){
        answer = word.repeat(n/2)
    }else{
        answer = word.repeat(parseInt(n/2)) + "수"
    }
    return answer;
}

근데 그럼.... 수박이 두글자라서 되긴 됐는데.... 만약 글자가 길어진다면 계속 else if로 나머지 글자를넣어주어야 하나 ? ==> 더 고민해보자

4. 완주하지 못한 선수

배열 특정값 삭제

let arr = ['a', 'b', 'b', 'c'];

// 원소 'b' 삭제
for(let i = 0; i < arr.length; i++) {
  if(arr[i] === 'b')  {
    arr.splice(i, 1);
    i--;
  }
}

document.writeln(arr); // ['a', 'c']

이렇게하면 splice, split 오래걸림 --> 효율성 검사 5문제 전부 fail...
왜냐.. 조건에서 마라톤 경기에 참여한 선수의 수는 1명 이상 100,000명 이하라고 했는데,,
저대로 돌리면 최악의경우 100000*100000 만큼 반복문을 돌리게 되는 것임..
시간복잡도 공간복잡도 고려 해야함....
어떻게 해결이 됐다고 멈추지말고 좀더 간단하고 적은 메모리와 시간이 드는 방법을 고려해야함..
좀 더 간단히 만들려면

해시 - 키 밸류 쌍으로

participantObj = {
"leo" : 1,
"kiki" : 1,
"eden": 1
}
participantObj[person]

completion.forEach((person)=> participantObj[person]-- )

{
"leo" : 1,
"kiki" : 0,
"eden": 0
}

이렇게 만들어주면, 밸류가 1인 키만 가져와서 보여주면 훨씬 간단
인데??? 난 일단 저런식으로 어떻게 만들어주는지를 모른다. 찾아봐야함..

하지만?

function solution(participant, completion) {
    let answer = '';
    
    let name = participant.sort()//["eden","kiki","leo"]
    let fin = completion.sort()//["eden","kiki"]
    for(let i=0;i<participant.length;i++){
        if(name[i]!=fin[i]){
            answer= name[i]
            return answer;
        }
    }
    console.log(answer)
}

이렇게 하면.. 동명이인이 있더라도... 틀린거 하나만 나오게 되니까.. 해결..
처음에 저렇게 풀다가 안돼서 다른 방향으로 틀었는데 역시 끝을 봤어야 했다...

includes, indexOf, splice, forEach <-- 고민했던 것들

5. split

글자마다 띄우고 싶은거라면 꼭!

split('') 으로 해줘야함

split([분류기준]) 인것임.

6. 문자형, 숫자형, 불린형 변경

String()
Number()
Boolean()

7. math.sqrt() : 제곱근

8. Number() : 정수판별

9. break, continue

: 반복문 내에서 사용.
break는 즉시 반복문 탈출 !
continue는 그 조건을 충족하면 그밑부터는 실행하지않고 다음 i로 넘어감

10. do while

do{해야할일}while{범위}

11. 자릿수의 합

function solution(n){
    let answer = 0;
    let list = String(n).split('')
    
    for(i=0;i<list.length;i++){
        answer += Number(list[i]) 
    }

    // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
    console.log(list)

    return answer;
}

12. for문이랑 비슷한데 내가 모르는것들...forEach, for...of, for...in

let answer = [1, 2, 5, 7]
  for(let i of answer)

내일 찾아볼 것..

*** 느낀점

for과 if 하나만으로 모든 lv.0, lv.1 코테를 정복하려했던 나의 우매함에 통탄하며..
있는 메서드를 최대한 활용하는 것도 효율을 극대화 하는 방법 중 하나이다..(근데 뭘 알아야 활용할 수 있으니 메서드 공부를 열심히 하도록 하자...)
코테를 무조건 수학문제처럼 접근하면 오히려 더 돌아갈 수 있다.. (ex. Date로 2016 날짜 구하기..)
결국 어떤 메서드가 있는지 알고(꼭 안외워도 됨), 적재적소에 활용하도록 하자..
for과 if 만으로 해결하려는 바닐라 바닐라 자바스크립트(?) 는 이제 그만하도록..
시간복잡도, 공간복잡도 고려하기. 어떤메서드는 굉장히 무거울(?) 수 있다. --> 요것도 알아보기

profile
항상 피곤한 인서의 개발블로그

0개의 댓글