고양이와 코딩

[프로그래머스] 11월14일 ~ 11월20일 본문

javascript

[프로그래머스] 11월14일 ~ 11월20일

ovovvvvv 2023. 11. 15. 00:12
728x90

11월14일

콜라츠 수열 만들기

 

내 풀이

function solution(n) {
    var answer = [];
    answer.push(n);
    
    while (n !== 1){
        if (n % 2 === 0){
            n = n / 2;
            answer.push(n);
        } else if ( n % 2 !== 0){
            n = 3 * n + 1;
            answer.push(n);
        }
    }
    return answer;
}

 

배열 만들기4

 

내 풀이

function solution(arr) {
    var stk = [];
    var i = 0;
    
    while ( i < arr.length){
        if ( stk.length < 1){
            stk.push(arr[i]);
                i++;
        } else if (stk.length >= 1){
            if ( stk[stk.length - 1] < arr[i]){
                stk.push(arr[i]);
                i += 1;
            } else if (stk[stk.length - 1] >= arr[i]){
                stk.pop();
            }   
        }
    }
    return stk;
}

 

간단한 논리 연산

 

내 풀이

function solution(x1, x2, x3, x4) {
    var answer = (x1 || x2) && (x3 || x4);
    return answer;
}

∧ == 논리곱 == and == &&

∨ == 논리합 == or == ||

 

 

11월 15일

주사위 게임3

아.. 진짜 까다롭다 ㅜㅜ 이거 if문으로 다 박아서 풀긴 했는데 다른 방법으로 풀고싶어서 이런저런 풀이들을 찾아봤다

근데!!!! 이해가 안된다 ㅋㅋ 뭐 성능은 떨어질지언정 if문으로 푸는게 가장 보기는 좋은듯.. 에라모르겠다 풀기만 하면 된거아녀

 

내 풀이

function solution(a, b, c, d) {

    if (a === b && a === c && a === d) return 1111 * a

    if (a === b && a === c) return (10 * a + d) ** 2
    if (a === b && a === d) return (10 * a + c) ** 2
    if (a === c && a === d) return (10 * a + b) ** 2
    if (b === c && b === d) return (10 * b + a) ** 2

    if (a === b && c === d) return (a + c) * Math.abs(a - c)
    if (a === c && b === d) return (a + b) * Math.abs(a - b)
    if (a === d && b === c) return (a + b) * Math.abs(a - b)

    if (a === b) return c * d
    if (a === c) return b * d
    if (a === d) return b * c
    if (b === c) return a * d
    if (b === d) return a * c
    if (c === d) return a * b

    return Math.min(a, b, c, d)
}

나는 return문을 전부 if문 아래줄에 썼는데, 다른사람의풀이를 보니 이렇게 한줄로 쓴게 있옸다.

이게 훨씬 깔끔해서 이렇게 수정했다 ㅎㅎ

 

글자 이어 붙여 문자열 만들기

 

내 풀이

function solution(my_string, index_list) {
    return index_list.reduce((acc, index) => 
    acc + (my_string[index] || ''), '');
}

reduce함수를 사용해서 index_list의 요소를 순회하고, 그 요소에 해당하는 index를 my_string에 적용해서 acc에 누적해서 더한당
ㅎ해당하는 인덱스가 없으면 ''빈 문자열을 더하고!! reduce함수의 초깃값으로 ''을 준당

 

9로 나눈 나머지

 

처음 풀이

function solution(number) {
    var answer = 0;
    
    for (let i = 0; i < number.length; i++){
      answer += parseInt(number[i], 10); 
      answer %= 9;
    }
    
    return answer;
}

 

문자열 여러 번 뒤집기

 

내 풀이

function solution(my_string, queries) {
    queries.forEach(([a, b]) => {
        const reversed_string = my_string.substring(a, b + 1).split('').reverse().join('');
        my_string = my_string.slice(0, a) + reversed_string + my_string.slice(b + 1);
    });
    return my_string;
}

2차원 배열을 forEach문으로 추출한 뒤 reversed_string 변수를 만들어서 각각의 구간을 뒤집고,  기존의 문자열을 추출하지 않은 부분과 추출 한 부분으로 나누어서 더해준다 ㅎㅎ

 

 

 

11월17일

배열 만들기5

 

첫 번째 풀이

function solution(intStrs, k, s, l) {
    var answer = [];
    
    for (let i = 0; i < intStrs.length; i++){
        var subStrs = intStrs[i].substring(s, l);
        
        if (parseInt(subStrs) > k){
            answer.push(parseInt(subStrs));
        }
    }
    return answer;
}

흠 ㄱㅡ 왠지 계속 빈 배열만 반환되서 이유를 찾아봤더니

 

function solution(intStrs, k, s, l) {
    var answer = [];
    
    for (let i = 0; i < intStrs.length; i++){
        var subStrs = intStrs[i].substring(s, s + l);
        
        if (parseInt(subStrs) > k){
            answer.push(parseInt(subStrs));
        }
    }
    return answer;
}

substring으로 문자열을 자를 때 범위를 s, s + l 로 정해주어야 한다

 

 

부분 문자열 이어 붙여 문자열 만들기

 

내 풀이

function solution(my_strings, parts) {
    var answer = '';

    for (let i = 0; i < my_strings.length; i++) {
        const [a, b] = parts[i];
        const subString = my_strings[i].substring(a, b + 1);
        answer += subString;
    }

    return answer;
}

이차원 배열에 익숙해지는중 ㅎ ㅅ ㅎ 

 

 

11월18일

문자열 뒤의 n글자

 

내 풀이

function solution(my_string, n) {
    return my_string.substring(my_string.length - n, my_string.length);
}

뒤에서 n번째 문자부터 끝까지 

 

 

접미사 배열

 

내 풀이

function solution(my_string) {
    var answer = [];
    
    for (let i = 1; i < my_string.length + 1; i++){
        answer.push(my_string.substring(my_string.length - i, my_string.length ));
    }
    return answer.sort();
}

 

 

11월19일

접미사인지 확인하기

 

내 풀이

function solution(my_string, is_suffix) {
    var answer = [];
    
    for(let i = 1; i < my_string.length + 1; i++){
        answer.push(my_string.substring(my_string.length - i, my_string.length));
    }
    return answer.includes(is_suffix) ? 1 : 0;
    
}

 

다른 사람의 풀이

const solution = (str, suff) => str.endsWith(suff) ? 1 : 0

ㅔ??

 

문자열 앞의 n글자

 

내 풀이

function solution(my_string, n) {
    return my_string.substring(0,n);
}

 

 

접두사인지 확인하기

 

내 풀이

function solution(my_string, is_prefix) {
    var array = [];
    
    for (let i = 1; i < my_string.length + 1; i++){
        array.push(my_string.substring(0, i));
    }
    return array.includes(is_prefix) ? 1 : 0;
}

 

문자열 뒤집기

 

내 풀이

function solution(my_string, s, e) {
    return my_string.substring(0, s) +
           my_string.substring(s, e + 1).split('').reverse().join('') +
           my_string.substring(e + 1, my_string.length);
}