ABOUT ME

Today
Yesterday
Total
  • [JS/프로그래머스] 컨트럴 제트
    Coding Test/JavaScript 2023. 1. 16. 16:14

    문제 설명

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

    제한사항

    • 1 ≤ s의 길이 ≤ 200
    • -1,000 < s의 원소 중 숫자 < 1,000
    • s는 숫자, "Z", 공백으로 이루어져 있습니다.
    • s에 있는 숫자와 "Z"는 서로 공백으로 구분됩니다.
    • 연속된 공백은 주어지지 않습니다.
    • 0을 제외하고는 0으로 시작하는 숫자는 없습니다.
    • s는 "Z"로 시작하지 않습니다.
    • s의 시작과 끝에는 공백이 없습니다.
    • "Z"가 연속해서 나오는 경우는 없습니다.

    입출력 예                                          

    s result
    "1 2 Z 3" 4
    "10 20 30 40" 100
    "10 Z 20 Z 1" 1
    "10 Z 20 Z" 0
    "-1 -2 -3 Z" -3

     


     

    문제 풀이 

    1. js 메서드를 사용하지 않은 풀이
    2. split() 메서드를 이용한 풀이
    3. 메서드를 이용한 풀이

     

    1.  js 메서드를 사용하지 않은 풀이법

    //1. -, 0~9사이 숫자 
    //2. Z
    //3. 공백
    
    function solution(s) {
        let numbers = [];
        let collectNumber = ''
        for(let i = 0; i < s.length; i++) {
            const item = s[i];
            if(item === 'Z') {
                numbers.pop();
            } else if (item === ' ') {
                numbers.push(Number(collectNumber))
                collectNumber = '';
            } else {
                collectNumber += item;
            }
        }
        if(collectNumber !== '') {
            numbers.push(Number(collectNumber))
        }
        let sum = 0;
        for(let x of numbers) {
            sum += x;
        }
        return sum;
    }

     

    2. split() 메서드를 사용한 풀이

    function solution(s) {
        let sum = 0;
        const splittedArray = s.split(' ');
        for(let i=0; i < splittedArray.length; i++) {
            const item = splittedArray[i]
            if(item !== 'Z') {
                sum += Number(item);
            } else {
                sum -= Number(splittedArray[i-1]);
            }
        }
        return sum;
    }

     

    3. 메서드를 이용한 풀이

    function solution(s) {
        //문자열을 " " 마다 나눠 배열로 만들어 준다. 
    	s = s.split(" ");
        
    	//Z가 있는 인덱스 전 요소부터 그 다음 요소까지 없애준다. 
        while(s.includes('Z')) {
            s.splice(s.indexOf('Z')-1,2);
        };
        
    	//a 자리에는 initialnumber인 0이 들어가고 다음부터는 배열s의 문자열 요소가 숫자로 바뀌어 들어간다. 
        return s.reduce((a,b) => a+Number(b), 0);
    }

     

    긴 글 읽어주셔서 감사합니다. 

    -끝-

    반응형

    댓글

Designed by Tistory.