[알고리즘]프로그래머스 0단계 뽀개기(Day13)

HIHI JIN·2023년 2월 17일
1

알고리즘

목록 보기
14/29
post-thumbnail

Day 13

컨트롤 제트

숫자와 "Z"가 공백으로 구분되어 담긴 문자열이 주어집니다. 문자열에 있는 숫자를 차례대로 더하려고 합니다. 이 때 "Z"가 나오면 바로 전에 더했던 숫자를 뺀다는 뜻입니다. 숫자와 "Z"로 이루어진 문자열 s가 주어질 때, 머쓱이가 구한 값을 return 하도록 solution 함수를 완성해보세요.

//내 코드
function solution(s) {
    s=s.split(" ");
    for(let i=0; i<s.length; i++){
        if(s.includes("Z")){
            let a = s.indexOf("Z");
            s.splice(a-1,2);
        }
    }
    if(s.length===0) return 0;
    return s.map(v=>Number(v)).reduce((acc,cur) => acc+cur);
}
//문자열 s에서 Z의 위치를 찾는다.
//Z바로 전 인덱스와 Z를 제거한다.
//만약 Z가 문자열에 아직 포함된다면 계속 제거
//Z가 더이상 문자열에 없다면 map으로 숫자로 모두 바꾼 후 reduce로 더해준다.

//다른 사람 코드
function solution(s) {
    let arr = s.split(" ");
    while ( arr.indexOf('Z') > -1) {
        arr.splice( arr.indexOf('Z')-1, 2);
    }
    return arr.reduce((a,b) => parseInt(a) + parseInt(b),0)
}
//arr에 Z가 있을 때까지 while반복문
//z가 있는 인덱스 앞의 요소부터 2개 인덱스 지우기
//reduce로 더해줄때 parseInt로 number타입으로 바꿈
//내가 쓴 for문과 if문을 while문하나로 합쳤다.

배열 원소의 길이

문자열 배열 strlist가 매개변수로 주어집니다. strlist 각 원소의 길이를 담은 배열을 retrun하도록 solution 함수를 완성해주세요.

//내 코드
function solution(strlist) {
    let result = strlist.map(v=>v.length);
    return result;
}
//for 반복문으로 배열strlist의 요소들을 나열
//i = i.length; strlist.splice(i,1,strlist[i].length);
//splice로 i번째인덱스의 글자를 지우고 strlist[i].length으로 교체 하는 코드
//map메서드를 써서 strlist.map(v=>v.length) 배열의 요소를 바로 치환하는 방법도 있다.

중복된 문자 제거

문자열 my_string이 매개변수로 주어집니다. my_string에서 중복된 문자를 제거하고 하나의 문자만 남긴 문자열을 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(my_string) {
    return [...new Set(my_string.split(""))].join("");
}
/* 중복 제거방법은 여러가지가 있다.
return my_string.split("").filter((e,idx) => my_string.indexOf(e)===idx).join("");
let result = [];
for(let i of my_string){
    if(!result.includes(i)) result.push(i);
}
return result.join("");
*/

//다른 사람 코드
function solution(my_string) {
    return [...new Set(my_string)].join('');
}//split("")을 쓰지않아도 문자열에도 set메서드 사용이 가능하다.

삼각형의 완성조건 (1)

선분 세 개로 삼각형을 만들기 위해서는 다음과 같은 조건을 만족해야 합니다.
가장 긴 변의 길이는 다른 두 변의 길이의 합보다 작아야 합니다.
삼각형의 세 변의 길이가 담긴 배열 sides이 매개변수로 주어집니다. 세 변으로 삼각형을 만들 수 있다면 1, 만들 수 없다면 2를 return하도록 solution 함수를 완성해주세요.

//내 코드
function solution(sides) {
    let long = Math.max(...sides);
    sides.splice(sides.indexOf(long),1);
    let plus = sides.reduce((a,b)=> a+b);
    return plus<=long ? 2:1;
}
//가장 큰 변 구하기
//나머지 변을 더한값이 큰 변보다 작거나 같으면 2, 크면 1 리턴

//다른 사람 코드
function solution(sides) {
    sides = sides.sort((a,b) => a-b)
    return sides[0]+sides[1] > sides[2] ? 1 : 2;
}//정적배열이라 sort로 정렬하는 것이 더 깔끔하다.
profile
신입 프론트엔드 웹 개발자입니다.

0개의 댓글