ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • #AIL_23.12.11 // Programmers_문자열 내림차순으로 배치하기
    AIL( Algorithm I Learned) 2023. 12. 11. 10:45

    ## AIL_문자열 내림차순으로 배치하기

    *** 문제 설명
    문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요.s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다.

    *** 제한 사항
    str은 길이 1 이상인 문자열입니다.

    *** 입출력 예
    s return
    "Zbcdefg" "gfedcbZ"

     


    ## solution.JavaScript

    1. 문제의 접근 방식

    주어진 문제는 문자열 S를 내림차순으로 정렬하는 문제입니다. 대문자는 소문자보다 작은 것으로 간주되므로, 간단하게 문자열만 정리하면 됩니다.


    2. 문제풀이

    function solution(s) {
       return String(s).split("").sort().reverse().join("");
    }
    /*
    테스트 1
    입력값 〉	"Zbcdefg"
    기댓값 〉	"gfedcbZ"
    실행 결과 〉	테스트를 통과하였습니다.
    */
    
    /*
    function solution(s) {
       // 주어진 입력값 s를 문자열로 변환
       return String(s)
       // 문자열을 각 문자 단위로 쪼개 배열로 만듦
       .split("")
       // 배열을 정렬. 기본적으로는 사전식 순서로 정렬됨
       .sort()
       // 정렬된 배열을 뒤집어 역순으로 만듦. 대문자가 소문자보다 앞에 오게 됨
       .reverse()
       // 정렬된 배열을 다시 문자열로 합치고 반환
       .join("");
    }
    
    */

     

    1) String(s): 주어진 입력값 s를 문자열로 변환합니다. 이 부분은 주어진 입력이 숫자, 객체 등 다른 형식일 경우에도 문자열로 변환하여 처리하기 위해 사용합니다. 

     

    2) .split(""): 문자열을 각 문자 단위로 쪼개 배열로 만듭니다. "Zbcdefg"라는 문자열이면 배열은 ["Z", "b", "c", "d", "e", "f", "g"]가 됩니다.

     

    3) .sort(): 배열을 정렬합니다. 기본적으로는 사전식 순서로 정렬되므로 알파벳 순서대로 배열됩니다. 이때, 대문자가 소문자보다 앞에 나옵니다.

     

    4) .reverse(): 정렬된 배열을 뒤집습니다. 이로써 배열은 역순으로 되어 대문자가 소문자보다 먼저 나옵니다.

     

    5).join(""): 정렬된 배열을 다시 문자열로 합치고 반환합니다. 배열 ["Z", "b", "c", "d", "e", "f", "g"]가 문자열 "Zbcdefg"로 합쳐집니다.


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

    function solution(s) {
        // 대문자와 소문자를 나누어 저장할 두 개의 빈 배열 생성
        let answer = [[], []];
    
        // 주어진 문자열을 순회
        for (let i = 0; i < s.length; i++) {
            // 현재 문자가 대문자인지 확인
            if (s[i] === s[i].toUpperCase()) {
                // 대문자일 경우, answer 배열의 두 번째 부분에 추가
                answer[1].push(s[i]);
            } else {
                // 소문자일 경우, answer 배열의 첫 번째 부분에 추가
                answer[0].push(s[i]);
            }
        }
    
        // 소문자 배열과 대문자 배열을 정렬하고 역순으로 뒤집음
        let ans1 = answer[0].sort().reverse().join('');
        let ans2 = answer[1].sort().reverse().join('');
    
        // 두 문자열을 합쳐 최종 결과 생성
        answer = [ans1, ans2].join('');
    
        // 최종 결과 반환
        return answer;
    }
    
    /*
    테스트 1
    입력값 〉	"Zbcdefg"
    기댓값 〉	"gfedcbZ"
    실행 결과 〉	테스트를 통과하였습니다.
    */

     

    1. let answer = [[], []];

     대문자와 소문자를 각각 저장할 두 개의 빈 배열을 생성합니다. answer[0]는 소문자를, answer[1]은 대문자를 저장할 배열입니다.

     

    2. for (let i = 0; i < s.length; i++) { ... }

    문자열 s를 순회하며 각 문자를 확인합니다.

     

    3. 대소문자 분류

    if (s[i] === s[i].toUpperCase()) { ... }: 현재 문자가 대문자인지 확인합니다. 대문자일 경우 answer[1] 배열에 추가하고, 소문자일 경우 answer[0] 배열에 추가합니다.

     

    4.  정렬 및 역순으로 뒤집기

    let ans1 = answer[0].sort().reverse().join('');: 소문자 배열을 정렬하고 역순으로 뒤집은 후 문자열로 변환합니다. let ans2 = answer[1].sort().reverse().join('');: 대문자 배열도 동일하게 처리합니다.

     

    5. 결과 문자열 생성

    answer = [ans1, ans2].join('');: 두 문자열을 합쳐 최종 결과를 생성합니다.

     

    6. return을 통한 최종 결과 반환합니다. 


     

    ** 정수 내림차순으로 배치하기와 유사한 문제

     

     

    #AIL_23.11.14 // Programmers_정수 내림차순으로 배치하기

    ## AIL_정수 내림차순으로 배치하기 ***문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372

    k0zdevel.tistory.com

     


     

    #  toUpperCase() 메서드란?

    문자열의 모든 문자를 대문자로 변환합니다.


    #  toUpperCase() 사용방법

    let str = "hello";
    let upperCaseStr = str.toUpperCase();
    console.log(upperCaseStr); // "HELLO"
    • toUpperCase() 메서드는 문자열을 호출한 후에 모든 문자를 대문자로 변환하여 새로운 문자열을 반환합니다.
    • 원본 문자열은 변경되지 않습니다.

    #  toUpperCase() 사용하는 상황

    1. 사용자 입력 처리

    사용자로부터 입력받은 문자열을 대문자로 변환하여 처리하는 경우가 있습니다. 예를 들면, 사용자 아이디나 이메일 주소를 대소문자 구분 없이 비교하는 경우 등.

     

    2. 문자열 비교

    대소문자 구분 없이 두 문자열을 비교해야 하는 경우에 사용될 수 있습니다.


    #  toUpperCase() 사용시 주의사항

    1. 원본 불변성

    toUpperCase()는 새로운 문자열을 반환하므로, 원본 문자열을 변경하지 않습니다. 따라서 원본을 변경하려면 새로운 변수에 할당해야 합니다.

     

    2. 유니코드 변환

    toUpperCase()는 문자열을 유니코드 대문자로 변환합니다. 이는 모든 문자에 대해 동작하지만, 예상치 못한 결과가 발생할 수 있습니다. 예를 들어, 특수 문자, 숫자, 혹은 특정 언어의 문자에 대한 변환은 사용자가 원하는 결과와 다를 수 있습니다.

     

    3. 성능 고려

    대문자로 변환하려면 문자열을 처음부터 끝까지 순회해야 합니다. 따라서 성능이 중요한 상황에서는 이를 고려해야 합니다.


    #  그럼? toUpperCase() 반대 개념은?

    반대 개념으로는 toLowerCase() 메서드가 있습니다. 


    #  그럼? toLowerCase() 메서드란?

    toLowerCase() 메서드는 문자열의 모든 문자를 소문자로 변환하는 역할을 합니다. 


    # toLowerCase() 사용방법

    let str = "HeLLo";
    let lowerCaseStr = str.toLowerCase();
    console.log(lowerCaseStr); // "hello"
    • toLowerCase() 메서드는 문자열을 호출한 후에 모든 문자를 소문자로 변환하여 새로운 문자열을 반환합니다.
    • 원본 문자열은 변경되지 않습니다.

    toLowerCase() 사용하는 상황

    1. 사용자 입력 처리

    사용자로부터 입력받은 문자열을 소문자로 변환하여 처리하는 경우가 있습니다. 예를 들면, 사용자가 입력한 검색어를 대소문자 구분 없이 처리하는 경우 등.

     

    2. 문자열 비교

    대소문자 구분 없이 두 문자열을 비교해야 하는 경우에 사용될 수 있습니다.

Designed by Tistory.