🗃️javascript/프로그래머스

대문자와 소문자(Lv.0)[고차 함수에 index 적용해서 풀기]

하얀성 2023. 1. 3. 15:43
<문제 설명>

문자열 my_string이 매개변수로 주어질 때, 대문자는 소문자로 소문자는 대문자로 변환한 문자열을 return하도록 solution 함수를 완성해주세요.


제한사항
  • 1 ≤ my_string의 길이 ≤ 1,000
  • my_string은 영어 대문자와 소문자로만 구성되어 있습니다.

입출력 예my_stringresult
"cccCCC" "CCCccc"
"abCdEfghIJ" "ABcDeFGHij"

입출력 예 설명

입출력 예 #1

  • 소문자는 대문자로 대문자는 소문자로 바꾼 "CCCccc"를 return합니다.

입출력 예 #2

  • 소문자는 대문자로 대문자는 소문자로 바꾼 "ABcDeFGHij"를 return합니다.

<제출답안>

 

function solution(my_string) {
    let str1 = my_string;
   return [...my_string].map( (x, i) => x.toUpperCase(i) !== str1[i]? x.toUpperCase() : x.toLowerCase()).join("")
}

 

이거 생각해내기가 왜그리 어려웠던 건지...

앞써푼 index 적용이 reduce나, filter처럼 map에도 적용이 되는구나..(고차함수에 index 적용 ok)

 


<보충>

 

다른 사람들 푼거 보니 저 str1 선언 필요없이 그냥 my_string 값이랑 바꾼 값이란 비교해서 삼항연사자로 답 풀어내더라.

 

function solution(my_string) {
    return my_string.split('').map(n => n === n.toUpperCase() ? n.toLowerCase() : n.toUpperCase()).join('')
}

 

아래 코드는 index 참고하기에 좋은 코드라 들고옴. 저렇게 아스키 코드를 써서도 가능했다.. 역시..

function solution(my_string) {
    return my_string.split("").map((v, index) => my_string.charCodeAt(index) < 97 ? v.toLowerCase() : v.toUpperCase()).join("");
}