[프로그래머스/코딩테스트 모음/Javascript] 7

TED·2023년 8월 19일
0

Javascript CodingTest

목록 보기
7/63
post-thumbnail
  • 오늘 푼 문제가 많아서 결국 나눠서 벨로깅하게되네,,, ㅠㅠ,.ㅠ 머리가 터질거같다

<오늘의 문제>

  1. 핸드폰 번호 가리기 1레벨
  2. 없는 숫자 더하기 1레벨
  3. 제일 작은 수 제거하기 1레벨
  4. 가운데 글자 가져오기 1레벨

1. 핸드폰 번호 가리기

function solution(phone_number) {
    var answer = '';
    
    for(let i = 0; i < phone_number.length - 4 ; i++) {
        answer = answer + "*"
    }
        answer = answer + phone_number.slice(phone_number.length - 4); 
                                                 // 여기서 answer는 이미 끝에 4자리를 제외하곤 * 모양이다.
    return answer;                               // 그냥 -4만 써도 되는데 가독성이 난 이게 더좋다..
}

// 어렵다.....
  • 나의 풀이
    : 문제를 처음 읽고 와 쉬운문젠가? 했는데 자꾸 꼬리에 꼬리를 물고 생각을하게되는 문제였다;
    일단 phone_number 값의 길이에 -4를 해서 뒤의 4자리만 남기고 값을 전부 로 변환했다.
    그리고
    이 들어간 answer값에 뒤에 4자리만 붙이려고 slice()를 사용해서 잘라낸 뒤 값을 냈다.
    .slice(phone_number.length - 4) 이 부분은 사실 내가 가독하기 좋게 일부로 쓴값이고, slice(-4)만 써도된다..ㅎ...

2. 없는 숫자 더하기

function solution(numbers) {
    var answer = 0;
    
    for(let i = 0; i <= 9; i++) {
        if(!numbers.includes(i)) { // numbers 에 포함되지 않은 요소값이 있다면,,
            answer += i;           // 그 값끼리 더해줘라..
        }
    }
    return answer; // 이 해답은 numbers가 커질수록 실행속도에 문제를 준다고 한다..
}
  • 나의 풀이
    : numbers 안에는 0~9까지의 숫자가 나열되어있고, 그 안에 없는 숫자만 빼서 더한값을 출력하는 문제..여서 문제이해는 쉬웠는데..
    if 문으로 만약 numbers안에 i값이 없다면 그값을 answer에 i를 카운팅해줘.. 입니다..
    includes()는 그 괄호안의 값을 뾱 하고 찾아내는 기능이다. 배열안에 요소값이 많을경우 실행속도가 느려지니 그럴땐 권장하지않습니다.
function solution(numbers) {
    var answer = 0;
    var result;
    
    for (let i = 0; i < numbers.length; i++) {
        answer += numbers[i]  // 현재 numbers 안의 모든 요소을 합친 값..
    }
    
    result = 45 - answer // 1~9까지 모두 합친값에서 answer값을 빼라..
    return result;
}
  • 다른 사람 풀이
    : 일단 현재 배열안의 요소값을 전부 더해주고 ! 더한값엔 결국 포함되지않은 요소들의 값이 빠져있겠지??? ㅎㅎㅎㅎㅎㅎ
    0~9까지의 총 합은 45이고 그 값에서 answer값을 빼주면 남은 요소의 합이 나와서 그 값을 retrun !
    생각도 못한 풀이였다 ㅂㄷㅂㄷ ㅎㅎ..

3. 제일 작은 수 제거하기

function solution(arr) {
    let min = Math.min(...arr); 
    let minIndex = arr.indexOf(min); // 최솟값의 인덱스

    arr.splice(minIndex, 1); // 최솟값을 배열에서 1개 제거

    return arr.length > 0 ? arr : [-1];
}
  • 나의 풀이
    : 일단 arr에서 최솟값을 뽑아내고, 그 값의 인덱스를 찾아낸다.
    그리고 splice() 을 이용해서 배열에서 최솟값을 삭제한다.
    배열에 뭔가 있으면 arr을 그대로 출력하고, 배열이 비었으면 -1를 출력하다.

4. 가운데 글자 가져오기

function solution(s) {
    var answer = '';
    
    if (s.length % 2 == 0) { // s 의 길이가 짝수 일 때,
        answer = s[s.length / 2 - 1] + s[s.length / 2]; // s[1] + s[2]
    } else {
        answer = s[Math.floor(s.length / 2)]; // s[2.5] 에서 소수점 날린 값
    }
    
    return answer;
}
  • 나의 풀이
    : 난 이 문제에서 머리를 쥐어짰다 왜지?? 다른사람들은 공짜문제같았단다.. 난 왜....왜??? 왜 ㅠㅠ
    문제 자체의 이해는 쉬웠다.. 단어의 길이가 홀수이면 가운데 한글자, 짝수이면 가운데 두글자를 뽑아서 그 값을 retrun하는 것
    주석으로 예시를 들어서 풀이하면 쉬웠당,,, 저렇게 length를 나누고 더하고 빼고 하는게 낯설어서 생각해내지 못했던 것 같다.
    s값을 [] 를 이용해서 바로 인덱스값으로 만드는게 확실히 풀이에는 좋았다.
function solution(s) {
    var answer = '';
    let a = 0;
    let b = 0;
    if (s.length % 2 != 0) {
        a = s.length / 2;
        a = Math.floor(a);
        return answer = s[a];
    } else {
        b = s.length / 2;
        return answer = s[b - 1] + s[b];
    }
    for (let i = 0; i < a.length; i++) {

    }
}
  • 다른 사람 풀이
    : 풀이 내용은 같은데, []안에 바로 대입했으면 보기 쉬웠을거같다. 참조하는 이유는 저렇게 let a = 0, let b = 0 이라고
    명시해서 푸는 난 너무 어색해서이다.. 아직 손에 익지않았다 ..ㅠㅠ
profile
컴맹 개발 입문자

0개의 댓글