[TIL] 항해99 8기 8일차

lezsuuu·2022년 7월 18일
0

TIL

목록 보기
7/42

오늘은 하루종일 알고리즘 문풀
다 끝내고 싶었는데 아직 다섯 문제 남아따

프로그래머스 코딩테스트 연습 Level1

문자열 내 p와 y의 개수

function solution1(s){    
    let answer = ''
    let lowy = s.toLowerCase().split('y').length-1
    let lowp = s.toLowerCase().split('p').length-1  
    if (lowp == lowy) {
        answer = true
    } else {
        answer = false
    }
    return answer
}

let 작작 붙이고, = 랑 == 도 좀 제발 구분하기🤦‍♀️

문자열 내 p와 y의 개수

function solution2(s) {  
    let answer = '';   
    if (s.length == 4) {
        answer = /^(\s|\d)+$/.test(s)
    } else if (s.length == 6) {
        answer = /^(\s|\d)+$/.test(s)
    } else {
        answer = false
    }
    return answer
}

코드는 유치한 수준이고 정규식은 복붙해왔다ㅎㅎ..

서울에서 김서방 찾기

function solution3(seoul) {
    let arr = seoul.indexOf("Kim");
    return '김서방은 ' + arr + '에 있다';
}
  • indexOF
    배열에서 지정된 요소를 찾을 수 있는 첫 번째 인덱스를 반환하고 존재하지 않으면 -1을 반환. 엄격한 동등성(===)을 사용.
arr.indexOf(searchElement[, fromIndex]) 
arr.indexOf(찾을 요소[, 검색을 시작할 색인])

진짜 오래 붙잡고 있었는데 fail ~~_(오늘 문풀 전멸 수준)_~~

행렬의 덧셈

function solution4(arr1, arr2) {
    let answer = Array()
    for (let i=0; i<arr1.length; i++){
        answer[i] = []
        for (let j=0; j<arr1[0].length; j++){
            answer[i][j] = arr1[i][j] + arr2[i][j]
        }
    }
    return answer
}
  • 배열이 중첩된 만큼 for문을 돌려서 안에 있는 index를 다룸
  • 바깥 for문([i])이 1번 돌 때, 안쪽 for문([j])은 총 3번 도는 중.

멘토링 기똥차게 받았다... 감삼다 매니저님🤓

x만큼 각격이 있는 n개의 숫자

function solution5(x, n) {
    let answer = Array()
    for (let i=1; i<=n; i++) {
        answer[i-1] = x*[i]
    }
    return answer
}

등차수열이 나온다는 스포를 들어서 나름 쉽게 푼 문제. 코드는 여전히 유치뽕짝

부족한 금액 계산하기

function solution6(price, money, count) {
    let tot = 0
    let answer = 0
    for (let i=1; i<=count; i++) {
        tot += price*[i]
    }
    if (tot<=money){
        answer = 0
    } else {
        answer = tot-money
    }
    return answer
}

알고리즘 스터디 발표 때 다른 분 풀이를 봤는데, 훨씬 깔끔하게 정리할 수 있었다. 그래도 정답 안 보고 풀었으니 만족해 보자...

2016년

function solution7(a, b) {
    const dayOfWeek = new Date(`2016-${a}-${b}`).toString()
    return dayOfWeek.slice(0,3).toUpperCase()   
}

이건 진짜 너무하다 생각했는데 막상 다시보니 쉬운 문제였네...? date 를 알게된 걸로~

나누어 떨어지는 숫자 배열

function solution8(arr, divisor) {     
    let nums = arr.filter((div) => div % divisor == 0)
    if (nums == ''){
        return [-1]
    } else {
        return nums.sort((a,b) => a-b)
    }   
}
console.log(solution8([3,2,6],10))
  • arr.sort()
    배열의 순서를 변경하는데 조건이 없으면 유니코드 순서로 정렬.
    index가 숫자인 경우 [1, 2, 34, 4] 이런 식으로 나오기 때문에,
    arr.sort((a,b) => a-b)로 정렬해야 함
  • arr.filter()
    배열을 조건에 맞게 거름. arr.filter((요소값, index, 대상) => {})
    이런 식으로 작성을 하는데, 조건 설정을 예제로 복습하기
    (+) 화살표함수를 이용해 한 줄로 코드를 짜면 return을 안 써도 됨!

와 이것도 진짜 ㅎㅊㅎ매니저님이 죽어가는 나를 살려줬다. filter... 두고 보자

나누어 떨어지는 숫자 배열

function solution8(arr, divisor) {     
    let nums = arr.filter((div) => div % divisor == 0)
    if (nums == ''){
        return [-1]
    } else {
        return nums.sort((a,b) => a-b)
    }   
}
console.log(solution8([3,2,6],10))
  • arr.sort()
    배열의 순서를 변경하는데 조건이 없으면 유니코드 순서로 정렬.
    index가 숫자인 경우 [1, 2, 34, 4] 이런 식으로 나오기 때문에,
    arr.sort((a,b) => a-b)로 정렬해야 함
  • arr.filter()
    배열을 조건에 맞게 거름. arr.filter((요소값, index, 대상) => {})
    이런 식으로 작성을 하는데, 조건 설정을 예제로 복습하기
    (+) 화살표함수를 이용해 한 줄로 코드를 짜면 return을 안 써도 됨!

와 이것도 진짜 ㅎㅊㅎ매니저님이 죽어가는 나를 살려준 문제다 filter... 두고 보자

내적

function solution9(a, b) {
    let answer = 0
    for(let i=0; i<a.length; i++){
        answer += a[i]*b[i]
    }
    return answer
}

내적이 뭔가요... 아직도 모르지만 문제에서 잘 설명이 나와서 어찌저찌 풀었다. index 끼리 함수를 짜는게 아직 어색해서 간단하지만 시간이 맣이 걸렸다. 쫄지말자╰(‵□′)╯

와.... 글쓴 거 다 날아갈 뻔 벨로그 장난하냐 진짜 싸우자

마지막으로 오늘 예제풀이에서 약간의 착오가 있었던 논리연산자 정리하면서 마무으리

  • && : true+true => true // and와 같다.
  • || : true+false => true // or와 같다.
  • ! : false => true // not과 같다.
profile
돌고 돌아 벨로그

0개의 댓글