[코딩테스트] 배열에서 문자열 대소문자 변환하기

JeongWuk_99·2024년 5월 6일
post-thumbnail

인트로

문제를 처음보고 홀수/짝수 번째 인덱스 배열을 돌며 toLowerCase()toUpperCase() 문자열 메소드를 사용하면 될 것 같다는 생각이 들었다.

제한 사항을 준 이유에 대해서 생각해봤는데,

  1. 배열의 길이가 길어지면 문제가 되나?
  2. 숫자/한글은 대소문자 구분이 없으니 알파벳으로 이루어진 배열이라는 제한을 두었구나.

우선, 배열의 길이가 0이면 안되는 거니까 1보다 크거나 같다는 인정! 20보다 작거나 같다는 의미는 무엇일까? -> 결국 찾지 못함.

검색하다가 우연히 발견한 배열에 관한 내용
https://velog.io/@redjen/%EB%8B%B9%EC%8B%A0%EC%9D%98-%EB%B0%B0%EC%97%B4%EC%9D%80-%EA%B4%9C%EC%B0%AE%EC%9D%80%EA%B0%80%EC%9A%94

스토리

초기 코드

function solution(strArr) {
    let answer = [];
    for (let i = 0; i < strArr.length; i++) {
        if (i % 2 === 0) {
            answer.push(strArr.toLowerCase());
        } else {
            answer.push(strArr.toUpperCase());
        }
    }
    return answer;
}

에러 발생!

answer.push(strArr.toLowerCase());
                               ^
TypeError: strArr.toLowerCase is not a function

엥? 아! strArr에 인덱스 값을 안줬구나! ㅋㅋㅋ

수정 코드

function solution(strArr) {
    let answer = [];
    for (let i = 0; i < strArr.length; i++) {
        if (i % 2 === 0) {
            answer.push(strArr[i].toLowerCase());
        } else {
            answer.push(strArr[i].toUpperCase());
        }
    }
    return answer;
}

모두 통과!

파란색이 아주 보기 좋구만유~!

결과

사용한 개념

  1. 반복문
  2. 나머지 판별 연산자 '%'
  3. 문자열 메소드
  4. 배열 요소 추가 메소드

번외

다른 방법으로 더 쉽게? 더 짧게? 풀 수 있을까?!

방법1 map()

개념
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/map

풀이

const solution = (strArr) => strArr.map((currValue, index) => index % 2 === 0 ? currValue.toLowerCase() : currValue.toUpperCase());


방법2 reduce()

개념
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/reduce

풀이

const solution = (strArr) => strArr.reduce(
    (acc, cur, index) => [...acc, index % 2 === 0 ? cur.toLowerCase() : cur.toUpperCase()], []
)


방법3 forEach()

개념
https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach

풀이

const solution = (strArr) => {
    let answer = [];
    strArr.forEach((arr, index) => {
        if (index % 2 == 0) {
        	answer.push(arr.toLowerCase());
        } else {
        	answer.push(arr.toUpperCase());
        }
    });
    return answer;
}
profile
꾸준함에 도전하는 중

0개의 댓글