몸과 마음이 건전한 SW 개발자

프로그래머스 [Lv. 0] 대소문자 바꿔서 출력하기 {언어 : JavaScript} 본문

개발 언어 입문/자바스크립트

프로그래머스 [Lv. 0] 대소문자 바꿔서 출력하기 {언어 : JavaScript}

스위태니 2024. 2. 14. 04:48

문제 링크

https://school.programmers.co.kr/learn/courses/30/lessons/181949

 

프로그래머스

코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.

programmers.co.kr

정답 코드 1

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = [line];
}).on('close',function(){
    str = input[0];
    // map()을 사용하여 각 문자를 변환하고 새 배열을 생성합니다.
    const newArr = str.split('').map(char => {
        if (char >= 'a' && char <= 'z') {
            return char.toUpperCase();
        } else if (char >= 'A' && char <= 'Z') {
            return char.toLowerCase();
        } else {
            return char; // 알파벳이 아닌 문자는 변경 없이 반환
        }
    });
    // join()을 사용하여 배열의 모든 요소를 연결해 하나의 문자열로 만듭니다.
    const newStr = newArr.join('');
    console.log(newStr);
});

정답 코드 2

const readline = require('readline');
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

let input = [];

rl.on('line', function (line) {
    input = [line];
}).on('close',function(){
    let str = input[0];
    const newStr = str.split('').reduce((result, char) => {
        if (char >= 'a' && char <= 'z') {
            return result + char.toUpperCase();
        } else if (char >= 'A' && char <= 'Z') {
            return result + char.toLowerCase();
        } else {
            return result + char; // 알파벳이 아닌 문자는 변경 없이 추가
        }
    }, '') // 초기값으로 빈 문자열을 제공합니다.
    console.log(newStr);
});

풀이 방법

  1. map을 이용해서 새로운 배열을 만든다.
  2. reduce를 이용해서 새로운 문자열을 만든다.

1번 코드
2번 코드

느낀점

  • 10000자의 문자열로 비교한 결과
function generateRandomString(length) {
    const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
    let result = '';
    for (let i = 0; i < length; i++) {
        result += characters.charAt(Math.floor(Math.random() * characters.length));
    }
    return result;
}

function transformUsingReduce(str) {
    return str.split('').reduce((result, char) => {
        if (char >= 'a' && char <= 'z') {
            return result + char.toUpperCase();
        } else if (char >= 'A' && char <= 'Z') {
            return result + char.toLowerCase();
        } else {
            return result + char;
        }
    }, '');
}

function transformUsingMapJoin(str) {
    return str.split('').map(char => {
        if (char >= 'a' && char <= 'z') {
            return char.toUpperCase();
        } else if (char >= 'A' && char <= 'Z') {
            return char.toLowerCase();
        } else {
            return char;
        }
    }).join('');
}

// 문자열 생성
const testString = generateRandomString(10000); // 예: 10,000자의 랜덤 문자열

// reduce 사용
console.time('Using reduce');
transformUsingReduce(testString);
console.timeEnd('Using reduce');

// map + join 사용
console.time('Using map + join');
transformUsingMapJoin(testString);
console.timeEnd('Using map + join');