고양이와 코딩

[프로그래머스] 1월8일 ~ 1월14일 본문

javascript

[프로그래머스] 1월8일 ~ 1월14일

ovovvvvv 2024. 1. 8. 22:34
728x90

1월8일

내적

 

내 풀이

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

 

 

가운데 글자 가져오기

 

내 풀이

function solution(s) {
    let middle_char = '';
    let middle_index = Math.floor(s.length / 2);
   
    if ( s.length % 2 === 0){
        middle_char = s.substring(middle_index - 1, middle_index + 1);
    } else {
        middle_char = s.charAt(middle_index);
    }
    
    return middle_char;
}

처음에는 s가 짝수일때 substring을 middle_index - 1부터 2까지로 설정했는데 

이렇게 할 경우 "abcdef"에서 middle_index가 3일때 substirng()이 s.subsring(2, 2) 로 작동하기 때문에 

시작과 끝 인덱스가 같은 것으로 인식하게 된다 !! 조심 ㅎㅎ

 

 

1월9일

수박수박수박수박수박수?

 

내 풀이

function solution(n) {
    let watermelon = '';
    
    for (let i = 0; i < n / 2; i++){
        watermelon += '수';
        watermelon += '박';
    }
    
    return watermelon.substring(0, n);
}

 

다른 사람의 풀이

const waterMelon = n => "수박".repeat(n).slice(0,n);

 

 

약수의 개수와 덧셈

 

내 풀이

function solution(left, right) {
    let sum = 0;
    
    for(let i = left; i <= right; i++){
        let count = 0; 
        for (let j = 1; j <= i; j++){
            if (i % j === 0){
                count++; 
            }
        }
        
        if (count % 2 === 0){
            sum += i; 
        } else {
            sum -= i; 
        }
    }
    return sum;
}

 

다른 사람의 풀이

function solution(left, right) {
    var answer = 0;
    for (let i = left; i <= right; i++) {
        if (Number.isInteger(Math.sqrt(i))) {
            answer -= i;
        } else {
            answer += i;
        }
    }
    return answer;
}

와 이런건 봐도 평생 활용도 못할거같다....

제곱근이 정수면 약수의 개수가 홀수다.....

 

 

문자열 내림차순으로 배치하기

 

내 풀이

function solution(s) {
    return s.split('').sort().reverse().join('');
}

sort() 메서드는 문자열을 사전식으로 정렬하기 때문에, 대문자가 소문자보다 아스키 코드 값이 작다! 

따라서 오름차순으로 정렬을 한 뒤 배열을 역으로 뒤집고, 합쳐준다.

 

 

1월12일

부족한 금액 계산하기

 

내 풀이

function solution(price, money, count) {
    let answer = money;
    let sum = 0;

    for (let i = 1; i <= count; i++){
        sum += price * i;
    }
    answer = sum - money;
    
    return money > sum ? 0 : answer;
}

 

 

1월14일

문자열 다루기

힌트가 필요한가요? 보면 일단 통과 못할거라는 생각을 합니다!

 

첫 번째 코드

function solution(s) {
    let arr = s.split('');
    let arr_len = arr.length;
    
    for (let i = 0; i < arr_len; i++) {
        if ((arr_len === 4 || arr_len === 6) && /^[0-9]+$/.test(arr[i])) {
            return true;
        } else {
            return false;
        }  
    }
}

몇 테스트 케이스를 통과하지 못하길래 힌트 봤는데, 문자 e를 숫자로 인식할 수도 있다고 하네요.. (지수 표기법으로 읽을 수 있다면)

따라서 이를 예외처리 해주어야 합니다.

 

제출한 코드

function solution(s) {
    let arr = s.split('');
    let arr_len = arr.length;
    
    for (let i = 0; i < arr_len; i++) {
        if ((arr_len === 4 || arr_len === 6) && /^\d+$/.test(arr.join('')) && !/e/i.test(arr.join(''))) {
            // /^\d+$/는 문자열이 0부터 9까지의 숫자로만 이루어져 있는지를 검사하는 정규표현식
            // /e/i.test(arr.join(''))는 문자열에 'e'가 포함되어 있는지 검사
            return true;
        } else {
            return false;
        }  
    }
}

 

if문 조건!

  1. arr_len이 4 또는 6이어야 합니다.
  2. arr.join('')을 사용하여 배열을 문자열로 변환하고, /^\d+$/ 정규표현식을 사용하여 문자열이 0부터 9까지의 숫자로 이루어져 있는지 확인합니다.
  3.  !/e/i.test(arr.join(''))를 사용하여 문자열이 e가 포함되어 있지 않은지 확인합니다. (/e/i 정규표현식은 대소문자를 구분하지 않고 e를 찾습니다.