고양이와 코딩

[프로그래머스] 11월21일 ~ 11월27일 본문

javascript

[프로그래머스] 11월21일 ~ 11월27일

ovovvvvv 2023. 11. 21. 21:26
728x90

11월 21일

세로 읽기

 

내 풀이

function solution(my_string, m, c) {
    var answer = [];
    
    for (let i = 0; i < my_string.length; i += m){
        answer.push(my_string[i + c - 1]);
    }
    return String(answer.join(''));
}

... 문제도 입출력 예도 너무 세로이고.. 너무 표처럼 생겨서.. 나? 이런문제 풀 수 없어
이런문제 풀 실력이 안돼. 라고 생각했지만..!!!!!! 정신을 다시 차리고 생각해보니

그냥 4씩 잘라서 가로로 쭉 놓고 그 요소의 c번째만 합쳐서 문자열로 만들면 되는것이더군요 ꩜ ̫ ꩜

 

11월 22일

qr code

 

내 풀이

function solution(q, r, code) {
    var answer = '';
    
    for (let i = 0; i < code.length; i++){
        if(i % q === r){
            answer += code[i];
        }
    }
    return answer;
}

 

다른 사람의 풀이

function solution(q, r, code) {
  return [...code].filter((_, i) => i % q === r).join('');
}

이렇게 풀도록 합시다 (제발)

 

 

문자 개수 세기

 

내 풀이

function solution(my_string) {
  var answer = new Array(52).fill(0);
  var alphabet = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

  for (let i = 0; i < my_string.length; i++) {
    let char = my_string[i];

    let index = alphabet.indexOf(char);
      if(index !== -1){
          answer[index]++;
      }
  }

  return answer;
}

indexOf() 메서드로 char문자가 alphabet 문자열 내에서 몇 번째 인덱스에 위치하는지를 찾고, 그 결과를 index 변수에 저장한 뒤
해당 문자가 alphabet 문자열 내에 있다면 index에 있는 값을 1 증가시킨다 ㅎㅎ

 

11월 25일

배열 만들기1

 

내 풀이

function solution(n, k) {
    var answer = [];
    
    for(let i = 1; i <= n; i++){
        if( i % k === 0){
            answer.push(i);
        }
    }
    return answer;
}

 

글자 지우기

 

내 풀이

function solution(my_string, indices) {
    let arr = my_string.split('');

    indices.sort((a, b) => b - a);
  
    indices.forEach(index => {
        arr.splice(index, 1);
    });
    
    return arr.join(''); 
}

my_string 을 배열로 변환한 후 indices 배열을 내림차순으로 정렬한다 ! (뒤에서부터 삭제하기 위해)

그 다음 forEach문으로 indices를 순회하면서 arr배열에서 인덱스에 해당하는 위치의 문자를 삭제한다 ㅎㅎ

 

 

카운트 다운

 

내 풀이

function solution(start, end_num) {
    var answer = [];
    
    for (let i = start; i >= end_num; i--){
        answer.push(i);
    }
    return answer;
}

 

 

가까운 1 찾기

이게 도대체 무슨소리인지.. 아마도 "idx보다 크거나 같으면서" 로 풀어야 맞는게 아닌가 싶습니다

 

첫 풀이

function solution(arr, idx) {
   arr.forEach(index => {
       if (index >= idx && arr[index] === 1){
           return index;
       }
   })
}

안되리라 예상은 했지만.. 왜 ? undefined가 반환되는지 몰랐는데, forEach 메서드를 잘못 사용해서이다 ㅜ ㅜ

forEach() 메서드는 첫 번째 매개변수가 각 요소의 값이고, 두 번째 매개변수가 인덱스를 나타내기 때문에

 

function solution(arr, idx) {
    let result = -1; 

    arr.forEach((value, index) => {
        if (index >= idx && value === 1) {
            result = index; 
        }
    });

    return result; 
}

코드를 이렇게 수정해줬지만 !!! 이것도 잘못됐따.. 조건을 만족하는 '가장 작은 인덱스' 를 찾아야 하기 때문이다

forEach문은 조건을 만족한다고 해서 루프가 종료되지 않는다 !

 

최종 코드

function solution(arr, idx) {
    let result = -1;

    for (let i = idx; i < arr.length; i++) {
        if (arr[i] === 1) {
            result = i;
            break; 
        }
    }

    return result;
}

 

돌고 돌아 for문으로....

 

 

11월 26일

리스트 자르기

 

첫 번째 풀이

function solution(n, slicer, num_list) {
    var answer = '';
    var num_str = num_list.join('');
    var [a, b, c] = slicer;
    
    if (n === 1){
        answer = num_str.substring(0, b + 1);
    } 
    else if (n === 2){
        answer = num_str.substring(a, num_str.length);
    }
    else if (n === 3){
        answer = num_str.substring(a, b + 1);
    }
    else if (n === 4){
        answer = num_str.substring(a, b + 1);
        var c_str = "";
        
        for (let i = 0; i < answer.length; i += 2){
            c_str += answer[i];
        }
        answer = c_str;
        
    }
    return answer.split('').map(Number);
}

 

 

처음 테스트 케이스 2개만 통과하고 채점할때 전부 틀린 절망의 코드,,,,,이게 실화냐

일단 형변환에서 문제가 많았고... ㅜㅜ (하 이런문제를 이렇게 오래 풀다니..~ 정신차려 ~)

막 문자열로 바꿨다가 배열로 바꿨다가 하니 숫자가 두자리를 넘어가면 다 잘려서 들어가서 (예를들어 10이면 1, 0 이렇게)

그리고 if문 대신 switch문으로 바꿨다..

 

제출 코드

function solution(n, slicer, num_list) {
    var answer = [];
    var [a, b, c] = slicer;

    switch(n) {
        case 1:
            answer = num_list.slice(0, b + 1);
            break;
        case 2:
            answer = num_list.slice(a);
            break;
        case 3:
            answer = num_list.slice(a, b + 1);
            break;
        case 4:
            answer = num_list.slice(a, b + 1);
            var c_str = [];
            
            for (let i = 0; i < answer.length; i += c){
                c_str.push(answer[i]);
            }
            answer = c_str;
            break;
    }
    return answer;
}

배열로 자를땐 substring 말고 slice를 쓰자... !!!!!!

 

 

배열 만들기 3

내 풀이

function solution(arr, intervals) {
    var answer = [];
    var [[a1, b1], [a2, b2]] = intervals;

    answer = arr.slice(a1, b1 + 1).concat(arr.slice(a2, b2 + 1));
    return answer;
}

 + 쓰면 문자열로 결합되므로 concat()을 사용합시다.