ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.12.19 // Programmers_이상한 문자 만들기**
    AIL( Algorithm I Learned) 2023. 12. 19. 22:05

    ## AIL_ 이상한 문자 만들기

    *** 문제 설명
    문자열 s는 한 개 이상의 단어로 구성되어 있습니다. 각 단어는 하나 이상의 공백문자로 구분되어 있습니다. 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 바꾼 문자열을 리턴하는 함수, solution을 완성하세요.

    *** 제한 사항
    문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
    첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

    *** 입출력 예
    s return
    "try hello world" "TrY HeLlO WoRlD"

    *** 입출력 예 설명
    "try hello world"는 세 단어 "try", "hello", "world"로 구성되어 있습니다. 각 단어의 짝수번째 문자를 대문자로, 홀수번째 문자를 소문자로 바꾸면 "TrY", "HeLlO", "WoRlD"입니다. 따라서 "TrY HeLlO WoRlD" 를 리턴합니다.

    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 문제는 문자열을 단어별로 나누어 각 단어의 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 변환하는 문제입니다. 

     


    2. 문제풀이

    function solution(s) {
        var answer = '';
    
        // 주어진 문자열을 공백을 기준으로 나누기
        var w = s.split(' ');
    
        // 각 단어에 대해 처리
        for (let i = 0; i < w.length; i++) {
            for (let j = 0; j < w[i].length; j++) {
                // 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 변환
                if (j % 2 === 0) {
                    answer += w[i][j].toUpperCase();
                } else {
                    answer += w[i][j].toLowerCase();
                }
            }
    
            // 단어 사이에 공백 추가
            if (i < w.length - 1) {
                answer += ' ';
            }
        }
    
        return answer;
    }
    /*
    테스트 1
    입력값 〉	"try hello world"
    기댓값 〉	"TrY HeLlO WoRlD"
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. 문자열 s를 공백을 기준으로 나눠서 각 단어를 배열 w에 저장하고 있습니다.

    // 문자열을 공백을 기준으로 나누어 배열에 저장
    var w = s.split(' ');

     

    2. 다음으로 배열 w에 있는 각 단어에 대해 처리하기 위해 반복문을 시작했습니다. i는 현재 처리 중인 단어의 인덱스를 나타내고, w.length는 배열의 길이, 즉 단어의 개수입니다.

    // 각 단어에 대해 처리하는 루프 시작
    for (let i = 0; i < w.length; i++) {

     

    3. 현재 처리 중인 단어의 길이만큼 또 다른 반복문을 시작하여 각 문자를 처리합니다. j는 현재 문자의 인덱스를 나타내고, w[i].length는 현재 단어의 길이입니다.

        // 각 단어의 길이만큼 루프를 돌면서 문자 처리
        for (let j = 0; j < w[i].length; j++) {

     

    4. 현재 문자가 몇 번째 알파벳인지에 따라 대문자 또는 소문자로 변환하는 부분입니다. 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 변환됩니다.

            // 짝수번째 알파벳은 대문자로, 홀수번째 알파벳은 소문자로 변환
            if (j % 2 === 0) {
                answer += w[i][j].toUpperCase();
            } else {
                answer += w[i][j].toLowerCase();
            }

     


    3. 다른사람의 문제풀이 및 접근방식 분석

    function toWeirdCase(s) {
      // 함수를 완성해주세요
      
      // 1. 주어진 문자열을 모두 대문자로 변환
      return s.toUpperCase()
        // 2. replace 메서드와 정규표현식을 사용하여 두 글자씩 처리
        .replace(/(\w)(\w)/g, function(match) {
          // 3. 콜백 함수에서 각 두 글자를 받아와 처리
          return match[0].toUpperCase() + match[1].toLowerCase();
        });
    }
    
    /*
    테스트 1
    입력값 〉	"try hello world"
    기댓값 〉	"TrY HeLlO WoRlD"
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

     

    1. toUpperCase() 메서드를 사용하여 주어진 문자열 s를 모두 대문자로 변환합니다.

     

    2. replace 메서드와 정규표현식 /(\w)(\w)/g를 사용하여 문자열 내의 각각의 두 글자를 찾아냅니다. 여기서 \w는 단어 문자를 의미하며, g는 전역 검색을 나타냅니다.

     

    3. replace의 콜백 함수에서 각 두 글자를 받아와 처리합니다. 첫 번째 글자는 toUpperCase()로 대문자로 변환하고, 두 번째 글자는 toLowerCase()로 소문자로 변환합니다.


    #  replace 메서드란?

    replace 메서드는 문자열에서 특정 패턴을 찾아 해당 패턴을 다른 문자열로 대체합니다. 

    string.replace(regexp|substr, newSubstr|function)
    • regexp|substr: 찾을 패턴 또는 문자열입니다. 정규표현식이나 문자열이 올 수 있습니다.
    • newSubstr|function: 대체할 새로운 문자열 또는 대체를 수행하는 함수입니다.

     


    #  replace 메서드 사용방법

    1. 정규표현식으로 치환 

    var newString = originalString.replace(/pattern/g, 'replacement');

     

    2. 문자열로 치환

    var newString = originalString.replace('oldString', 'newString');

     

    3. 콜백 함수로 치환 

    var newString = originalString.replace(/pattern/g, function(match) {
      // 대체할 내용을 반환
    });

     


    #  replace 메서드 장단점

    ** 장점

    간단하고 편리한 문자열 대체 기능을 제공합니다. 

    정규표현식을 사용하면 더 강력한 패턴 매칭이 가능합니다.

    ** 단점

    처음 일치하는 패턴만 치환되기 때문에 전체 일치를 위해서는 정규표현식에서 g 플래그를 사용해야합니다.

    문자열 자체를 치환하므로 원본 문자열은 변경되지 않습니다.


    #  replace 메서드 사용시기

    replace 메서드는 특정 문자열 패턴을 다른 문자열로 바꿀 때 사용합니다. 예를 들어, 특정 문자를 삭제하거나 패턴을 변경할 때 유용합니다.


    #  replace 메서드 사용 시 주의사항

    1. 정규표현식 주의

    정규표현식을 사용할 때는 패턴이 예상대로 작동하는지 확인해야합니다. 

    2. 원본 변경 주의

    replace 메서드는 원본 문자열을 변경하지 않고 새로운 문자열을 반환합니다. 따라서 결과를 적용하려면 변수에 할당해야합니다. 

    3. 대소문자 구분 주의

    기본적으로 replace 메서드는 대소문자를 구분합니다. 정확한 대소문자 일치를 원하는 경우에 주의해야합니다. 

     

Designed by Tistory.