[프로그래머스 코딩테스트 연습문제] 이상한 문자 만들기 | 알고리즘 설명 & 문제 풀이 with 자바스크립트(Javascript)

Re_Go·2023년 12월 9일
0

코딩테스트연습

목록 보기
14/106
post-thumbnail

1. 문제 설명

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

2. 제한 사항

문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.

첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

3. 입출력 예

4. 첫번째 문제 풀이(2023-12-09)

문제의 설명을 살펴보면, 각 단어들의 첫번째 알파벳의 인덱스는 0이라고 합니다. 그 말인 즉슨 위의 예제에서 try, hello, world의 각 0번째 인덱스는 t, h, w가 되는 것이죠.

자바스크립트는 특이하게도 문자열에도 인덱스가 부여되는데, 그 말인 즉슨 만약 "hello" 라는 문자열이 있다고 이에 해당하는 인덱스는 h(0), e(1), l(2), l(3), o(4) 총 다섯개가 있는 것이죠.

그래서 우선적으로는 입력 받은 문자열의 각 단어들을 독립적으로 때어내어 배열 형태로 재할당 시킨 후 이중 for문을 돌려 해당 단어의 인덱스를 기준으로 인덱스가 짝수인 경우 toUpperCase 메서드를, 홀수인 경우 toLowerCase를 호출하여 각 알파벳들을 변환 시킨 후

최종적으로 변환 된 문자들을 빈 배열에 할당한 후 다시 join 메서드를 사용해 문자열로 합치는 단계를 거치면 해결됩니다.

function solution(s) {
    let splitedWords = s.split(" ") // 입력 받은 문자를 split 메서드로 공백을 기준으로 쪼개어 splitedWords 변수에 할당합니다.
    let wordsArray = []; // 대,소문자로 변형을 마친 단어를 보관할 빈 배열 생성
    for(let i = 0 ; i < splitedWords.length ; i++){
    // 첫번째 for문은 변환시킬 단어들의 길이를 가진 splitedWolrds의 length를 반복 기준으로 잡습니다.
        let convertedWord = ""; // 두번째 for문에서 조건에 따라 대소문자로 포맷된 알파벳들을 보관할 convertedWord 변수를 첫번째 for문의 루프 때마다 초기화 해줍니다. 
        for(let j = 0 ; j < splitedWords[i].length ; j++){ // 두번째  for문의 반복 범위는 선택된(i 번째) 단어의 길이 만큼 반복합니다.
            if(j%2 === 0) { // 만약 j(여기선 선택된 단어의 인덱스라고 보시면 됩니다.)가 짝수일 경우 
                convertedWord += splitedWords[i][j].toUpperCase(); // 대문자로 바꾸고 convertedWords에 누적 증가
            }else{ // 그 반대, 짝수일 경우 
                convertedWord += splitedWords[i][j].toLowerCase(); // 소문자로 바꾸고 convertedWords에 누적 증가
            }
        } // 두번째 for문의 작업, 즉 선택된 단어에 대한 대소문자 포맷 전환이 완료되었다면 현재 비어있는 배열(wordsArray)에 할당(push) 해줍니다.
        wordsArray.push(convertedWord);
    };
  	// 모든 단어에 대한 포맷 작업이 끝났다면(첫번째 for문까지 종료 되었다면)
    return answer = worldsArray.join(" "); // 포맷 된 단어들이 들어있는 배열을 join 메서드를 이용해 공백을 기준으로 문자열로 결합한 후 결과값을 answer에 할당하고 최종적으로 반환합니다.
}
profile
인생은 본인의 삶을 곱씹어보는 R과 타인의 삶을 배워 나아가는 L의 연속이다.

0개의 댓글