[프로그래머스]Algorithm_23.03.22

윤성해·2023년 3월 22일
0

알고리즘

목록 보기
7/22
post-thumbnail

아오 어려워 일단그냥 생각을 해볼 수 있는것에 감사하..는걸ㄹ로..

문자열을 숫자, 숫자를 문자열로 만들기 기억하기

같은 숫자는 싫어

문제

내생각

  1. 빈 배열 하나 만들고
  2. 반복문으로 arr 돌리다가
  3. i랑 i + 1 되는 값이 다르면
  4. 그값을 빈 배열에 넣기.
    ❓ 빈배열 하나 안만들고 i === i ++ 해서 같은값만 삭제해도 괜찮은가..

내풀이

function solution(arr) {
    let result = "" //빈배열 arr 
    for (let i = 0; i < arr; i++){ //반복하며 돌다가
        if (i !== i++) { //i랑 i + 1 되는 값이 다르면
          result.push(arr[i])
        }
    }
>    
    console.log(result)
}

레퍼런스

  1. $
function solution(arr) {
    let result = [];  //빈배열 arr 
    for (let i = 0; i < arr.length; i++){ //반복하며 돌다가
        if (arr[i] !== arr[i+1]) { //i랑 i + 1 되는 값이 다르면
          result.push(arr[i])
        }
    }
     return result
}
  1. 마지막 데이터로 비교해주기
  2. 다양한 애덜 (at, substring, slice...)
const arr = [1,2,3,4,5]
>
arr[arr.length -1 ]
arr.at(-1)//요새 나온 문법임
  1. filter 사용 (앞뒤에 데이터가 같은지, 아닌지 비교)
function solution(arr) {
    const answer = arr.filter((el,i) =>{
        console.log(el,i, arr[i+1])
        return el !==arr[i+1] 
    })
    return answer
}

자릿수 더하기

문제

내생각

//for 반복문
//빈배열 하나 만들고
//각 요소 하나씩 빼서
//빈배열에 하나씩 넣고
//더하기

내풀이

function solution(n){
    let result = 0;
 for (let i = 0; i < n.length; i++ ){
     result = i++
 }
    return result
}

레퍼런스

1.

function solution(n){
    n = String(n); //숫자 타입을 문자열 타입으로 바꾼다. 
    let answer = 0;
    for (let i = 0; i < n.length; i ++){
        console.log(i,n[i])
        //answer가 숫자 0 이니까//문자열 타입을 숫자로 바꿔준다
        answer += Number(n[i]) // answer = answer + n[i] 
    }
    return answer
    // console.log(n, n[0], typeof n)
}

2. reduce 메서드로 풀기(split이용해서 문자열로 만드는거 복숩)

function solution(n){
   const answer = String(n) //숫자타입을 문자열로 변환해서 저장
                    .split("") //문자열을 배열로 하나씩 쪼개서 저장
                    .reduce((acc, cur) =>{
                        console.log(acc, cur)
                        return Number(acc) + Number(cur)
                    },0)
   return answer;
// console.log(answer)
}

약수의 합

문제

내생각

내풀이

레퍼런스

1.

function solution(n) {
   let answer = 0;
>    
    for (let i = 1; i<=n; i++){
        //약수란 a숫자를 b로 나눴을 때 나누어 떨어지면 b는 a의 약수
        //12를 3으로 나눴을 때 나누어 떨어지므로 3은 12의 약수
        //나머지값이 0 일경우 약수래요
        if (n % i === 0){
            answer = answer + i; //answer +=i
        }
    }
    return answer
}

2. 초기값을 자기자신으로 설정하기.

function solution(n) {
   let answer = n;//자기자신을 최솟값으로 넣음
    
    for (let i = 1; i<=n / 2; i++){
        //약수란 a숫자를 b로 나눴을 때 나누어 떨어지면 b는 a의 약수
        //12를 3으로 나눴을 때 나누어 떨어지므로 3은 12의 약수
        //나머지값이 0 일경우 약수래요
        if (n % i === 0){
            answer = answer + i; //answer +=i
        }
    }
    return answer
}

3. 연산된 결과를 가져오는 reduce 메서드
리듀스 사용하려면 배열이 필요함.

요거를 삼항 연상자 써서 리팩토링

profile
Slow and steady wins the race.

0개의 댓글