본문 바로가기
프로그래머스 코딩 테스트

프로그래머스 : JavaScript 알고리즘 100일 챌린지 43일차

by dongjin6539 2023. 6. 27.
728x90
반응형

프로그래머스 : JavaScript 알고리즘 100일 챌린지 43일차

 

코딩 기초 트레이닝 Day43

 

 

1. x 사이의 개수 : 문자열 myString이 주어집니다. myString을 문자 "x"를 기준으로 나눴을 때 나눠진 문자열 각각의 길이를 순서대로 저장한 배열을 return 하는 solution 함수를 완성해 주세요.

function solution(myString) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
myString result
"oxooxoxxox" [1, 2, 1, 0, 1, 0]
"xabcxdefxghi" [0, 3, 3, 3]

 

답 확인하기
function solution(myString) {
    return myString.split("x").map(a => a.length)
}

 

해설 확인하기

코드는 solution이라는 함수를 정의하고 있습니다. 이 함수는 하나의 매개변수 myString을 받습니다.

함수 내부에서는 myString을 "x"를 기준으로 분할한 후, map 메서드를 사용하여 분할된 각 문자열의 길이를 배열로 변환합니다.

예를 들어, "abcxdefxghi"라는 문자열을 solution 함수에 전달하면, ["abc", "def", "ghi"]로 분할된 후, 각 문자열의 길이인 [3, 3, 3]이 반환됩니다.

즉, solution 함수는 문자열을 "x"를 기준으로 분할한 후, 각 분할된 문자열의 길이로 이루어진 배열을 반환하는 기능을 수행합니다.

 

2. 문자열 잘라서 정렬하기 : 문자열myString이 주어집니다. "x"를 기준으로 해당 문자열을 잘라내 배열을 만든 후 사전순으로 정렬한 배열을 return 하는 solution 함수를 완성해 주세요. 단, 빈 문자열은 반환할 배열에 넣지 않습니다.

function solution(myString) {
    var answer = [];
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
myString result
"axbxcxdx" ["a", "b", "c", "d"]
"dxccxbbbxaaaa" ["aaaa", "bbb", "cc", "d"]

 

답 확인하기
function solution(myString) {
    let list = [];
    let str = "";
    for (let i = 0; i < myString.length; i++) {
        if (myString.charAt(i) !== 'x') {
            str += myString.charAt(i);
        } else {
            list.push(str);
            str = "";
        }
    }
    if (str !== "") {
        list.push(str);
    }
    let answer = list.filter(x => x !== "").sort();
    return answer;
}

 

해설 확인하기

코드는 solution이라는 함수를 정의하고 있습니다. 이 함수는 하나의 매개변수 myString을 받습니다.

함수 내부에서는 빈 배열 list와 빈 문자열 str을 선언합니다. 그리고 for 반복문을 사용하여 myString의 각 문자를 순회합니다.

문자열을 순회하면서 현재 문자가 'x'가 아닌 경우에는 str에 현재 문자를 추가합니다. 만약 현재 문자가 'x'인 경우에는 str을 list에 추가하고, str을 빈 문자열로 초기화합니다. 이렇게 하면 'x'를 기준으로 분할된 문자열이 list에 저장되게 됩니다.

for 반복문이 종료된 후, 마지막으로 str이 비어있지 않은 경우에는 str을 list에 추가합니다. 이는 마지막 문자열이 'x'로 끝나지 않는 경우를 처리하기 위한 조건입니다.

그 다음, list에서 빈 문자열을 제거하고 정렬한 뒤, 결과를 answer 변수에 할당합니다.

마지막으로, answer를 반환하면서 함수의 실행이 종료됩니다.

요약하면, 이 함수는 문자열을 'x'를 기준으로 분할한 후, 빈 문자열을 제거하고 정렬한 결과를 반환하는 기능을 수행합니다.

 

3. 간단한 식 계산하기 : 문자열 binomial이 매개변수로 주어집니다. binomial은 "a op b" 형태의 이항식이고 a와 b는 음이 아닌 정수, op는 '+', '-', '*' 중 하나입니다. 주어진 식을 계산한 정수를 return 하는 solution 함수를 작성해 주세요.

function solution(binomial) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
binomial result
"43 + 12" 55
"0 - 7777" -7777
"40000 * 40000" 1600000000

 

 

답 확인하기
function solution(binomial) {
    const [a,op,b] = binomial.split(' ')
    const operator = {
        '+': (a,b)=>a+b,
        '-': (a,b)=>a-b,
        '*': (a,b)=>a*b
    }
    return operator[op](Number(a),Number(b))
}

 

해설 확인하기

코드는 solution이라는 함수를 정의하고 있습니다. 이 함수는 하나의 매개변수 binomial을 받습니다.

함수 내부에서는 binomial을 공백을 기준으로 분할하여 [a, op, b]로 분리합니다. 이 때, a는 첫 번째 숫자, op는 연산자, b는 두 번째 숫자를 나타냅니다.

그 다음, operator라는 객체를 생성합니다. 이 객체는 연산자를 키(key)로 가지고, 연산을 수행하는 함수를 값(value)로 가집니다. 즉, + 연산자에 대한 함수는 두 수를 더하는 함수, - 연산자에 대한 함수는 두 수를 빼는 함수, * 연산자에 대한 함수는 두 수를 곱하는 함수입니다.

마지막으로, operator[op]를 통해 op에 해당하는 연산자 함수를 선택하고, Number(a)와 Number(b)를 통해 문자열을 숫자로 변환하여 해당 연산자 함수에 적용합니다. 그 결과를 반환하여 함수의 실행을 종료합니다.

요약하면, 이 함수는 문자열로 주어진 이항식을 해석하여 해당 연산을 수행한 결과를 반환하는 기능을 수행합니다.

 

4. 문자열 바꿔서 찾기 : 문자 "A"와 "B"로 이루어진 문자열 myString과 pat가 주어집니다. myString의 "A"를 "B"로, "B"를 "A"로 바꾼 문자열의 연속하는 부분 문자열 중 pat이 있으면 1을 아니면 0을 return 하는 solution 함수를 완성하세요.

function solution(myString, pat) {
    var answer = 0;
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
myString pat result
"ABBAA" "AABB" 1
"ABAB" "ABAB" 0

 

답 확인하기
function solution(myString, pat) {
    return ~~[...myString].map(a => a === 'A' ? 'B' : 'A').join("").includes(pat)
}

 

해설 확인하기

코드는 solution이라는 함수를 정의하고 있습니다. 이 함수는 두 개의 매개변수 myString과 pat을 받습니다.

함수 내부에서는 먼저 myString을 배열로 변환하고, 배열의 각 요소에 대해 'A'인 경우 'B'로, 그렇지 않은 경우 'A'로 변환합니다. 이를 위해 map 메서드를 사용하여 변환된 배열을 생성합니다.

그 다음, 생성된 배열을 빈 문자열로 결합하여 하나의 문자열로 만듭니다. 이를 위해 join("")을 사용합니다.

결합된 문자열에 includes(pat)을 적용하여 pat이 문자열에 포함되는지 여부를 판별합니다. includes 메서드는 문자열이 주어진 패턴을 포함하는지 확인하는 데 사용됩니다.

마지막으로, 포함 여부를 나타내는 불리언 값을 ~~ 연산자를 사용하여 0 또는 1로 변환한 후 반환합니다. ~~ 연산자는 값을 부호 없는 32비트 정수로 변환하는 역할을 합니다.

요약하면, 이 함수는 문자열 myString에서 'A'와 'B'를 상호 변환한 후, 변환된 문자열에 pat이 포함되는지 여부를 반환하는 기능을 수행합니다. 결과는 0 또는 1로 표현됩니다.

 

5. rny_string : 'm'과 "rn"이 모양이 비슷하게 생긴 점을 활용해 문자열에 장난을 하려고 합니다. 문자열 rny_string이 주어질 때, rny_string의 모든 'm'을 "rn"으로 바꾼 문자열을 return 하는 solution 함수를 작성해 주세요.

function solution(rny_string) {
    var answer = '';
    return answer;
}

길라잡이

  • 데이터를 수정해서 답을 구해보세요.
  • 예시
my_string return
"masterpiece" "rnasterpiece"
"programmers" "prograrnrners"
"jerry" "jerry"
"burn" "burn"

 

답 확인하기
function solution(rny_string) {
    let answer = rny_string.replaceAll("m", "rn");
    return answer;
}

 

해설 확인하기

코드는 solution이라는 함수를 정의하고 있습니다. 이 함수는 하나의 매개변수 rny_string을 받습니다.

함수 내부에서는 rny_string을 "m"을 "rn"으로 대체하여 변환한 후, answer 변수에 할당합니다. 이를 위해 replaceAll 메서드를 사용합니다. replaceAll("m", "rn")은 문자열 내의 모든 "m"을 "rn"으로 대체하는 기능을 수행합니다.

마지막으로, answer를 반환하여 함수의 실행을 종료합니다.

요약하면, 이 함수는 문자열 rny_string에서 모든 "m"을 "rn"으로 대체한 결과를 반환하는 기능을 수행합니다.

728x90
반응형