이 영역을 누르면 첫 페이지로 이동
lucid_dream 블로그의 첫 페이지로 이동

lucid_dream

페이지 맨 위로 올라가기

lucid_dream

다양한 상상을 현실로 만드는 멀티 크리에이터를 꿈꾸고 있습니다 ❤️

[Level 1] 이상한 문자 만들기

  • 2022.02.25 07:43
  • 📝 문제풀이/프로그래머스
글 작성자: NoHack
728x90

문제 설명

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

제한 조건

  • 문자열 전체의 짝/홀수 인덱스가 아니라, 단어(공백을 기준)별로 짝/홀수 인덱스를 판단해야합니다.
  • 첫 번째 글자는 0번째 인덱스로 보아 짝수번째 알파벳으로 처리해야 합니다.

문제 풀이

const solution = (s) => {
  // 문자열을 단어들로 분할
  let words = s.split(' ');

  // 각 단어를 순회하면서 짝, 홀수 인덱스 변환
  words = words.map((word) => {
    // 각 단어도 배열로 만든 후 처리하면 [T, r, Y], [H, e, L, l, O] 이런 식으로 만들어 짐
    // 그렇기 때문에 마지막에는 join으로 합쳐 TrY, HeLlO 이런 식으로 만들어 줘야 함
    return [...word]
      .map((char, index) => {
        if (index % 2 === 0) return char.toUpperCase();
        else return char.toLowerCase();
      })
      .join('');
  });

  // 변환된 단어들 사이사이 공백을 껴서 합침
  return words.join(' ');
};

const solution2 = (s) => {
  return s.toUpperCase().replace(/(\w)(\w)/g, (a) => a[0] + a[1].toLowerCase());
};

const inputs = ['try hello world'];
inputs.forEach((input) => console.log(solution(input)));

저는 두 가지 방법으로 문제를 해결했습니다. 첫 번째는 문자열을 단어들로 잘라 각 단어를 순회하며 처리한 방식이고, 두 번째는 정규 표현식으로 간단하게 처리한 방식입니다. 주석을 많이 달아놔서 설명이 필요한 부분이 많아 보이지는 않아 몇 가지 문법과 메소드 정도만 언급하겠습니다.

...은 스프레드 연산자(Spread Operator)로서, 배열이나 객체 또는 유사 배열의 요소를 펼쳐 배열로 만들어 주는 연산자입니다. 저는 문자열을 문자 단위로 잘라 배열로 변환할 때 주로 Array.from을 사용했었는데, 이 연산자를 사용하면 더욱 간단하게 만들 수 있습니다. 그리고 toUpperCase와 toLowerCase는 문자열 프로토타입에 정의된 메소드로 각각 문자열을 대문자와 소문자로 변환해 줍니다.

그리고 정규 표현식으로 처리한 함수는 이런 식으로 구현했습니다. 문자열을 먼저 전부 대문자로 변경한 다음 매칭 패턴을 (\w)(\w)로 설정하여, 이 패턴과 일치하는 부분에 대해 첫 글자는 그대로 두면서 두 번째 글자를 소문자로 변환하도록 했습니다. 패턴 문자 \w는 임의의 문자 한 글자를 의미합니다. 그렇기 때문에 (\w)(\w)라 함은 임의의 문자 두 개가 붙어있는 것을 의미합니다.

정규 표현식을 알고 있다면 문자열을 처리할 때 정말 간편하게 다룰 수 있습니다.
저작자표시 비영리 동일조건 (새창열림)

'📝 문제풀이 > 프로그래머스' 카테고리의 다른 글

[Level 1] 시저 암호  (0) 2022.02.25
[Level 1] 약수의 합  (0) 2022.02.25
[Level 1] 자릿수 더하기  (0) 2022.02.25
[Level 1] 자연수 뒤집어 배열로 만들기  (0) 2022.02.25
[Level 1] 정수 내림차순으로 배치하기  (0) 2022.02.25

댓글

이 글 공유하기

  • 구독하기

    구독하기

  • 카카오톡

    카카오톡

  • 라인

    라인

  • 트위터

    트위터

  • Facebook

    Facebook

  • 카카오스토리

    카카오스토리

  • 밴드

    밴드

  • 네이버 블로그

    네이버 블로그

  • Pocket

    Pocket

  • Evernote

    Evernote

다른 글

  • [Level 1] 시저 암호

    [Level 1] 시저 암호

    2022.02.25
  • [Level 1] 약수의 합

    [Level 1] 약수의 합

    2022.02.25
  • [Level 1] 자릿수 더하기

    [Level 1] 자릿수 더하기

    2022.02.25
  • [Level 1] 자연수 뒤집어 배열로 만들기

    [Level 1] 자연수 뒤집어 배열로 만들기

    2022.02.25
다른 글 더 둘러보기

정보

lucid_dream 블로그의 첫 페이지로 이동

lucid_dream

  • lucid_dream의 첫 페이지로 이동

검색

메뉴

  • All categories
  • About me
  • Guest Book

카테고리

  • 분류 전체보기 (122)
    • 💦 일상뻘글 (1)
    • ⭐️ 프로젝트 (7)
      • 사이드 프로젝트 (1)
      • 스터디 노트 (6)
    • 🌈 기술스택 (31)
      • Web Basic (10)
      • JavaScript (14)
      • React (0)
      • Git (7)
    • 💻 컴퓨터공학 (28)
      • 자료구조 (13)
      • 알고리즘 (7)
      • 운영체제 (4)
      • 소프트웨어 공학 (4)
    • 📝 문제풀이 (55)
      • 프로그래머스 (55)
      • 과제관 (0)
    • 🐹 취미생활 (0)
      • Film Log (0)
      • Cover Song (0)

댓글

정보

NoHack의 lucid_dream

lucid_dream

NoHack

나의 외부 링크

  • Github
  • Instagram

블로그 구독하기

  • 구독하기
  • RSS 피드

방문자

  • 전체 방문자
  • 오늘
  • 어제

티스토리

  • 티스토리 홈
  • 이 블로그 관리하기
  • 글쓰기
Powered by Tistory / Kakao. Copyright © NoHack.

티스토리툴바