❗ 문제
출처: 프로그래머스 코딩 테스트 연습,
https://school.programmers.co.kr/learn/courses/30/lessons/120849
영어에선 a, e, i, o, u 다섯 가지 알파벳을 모음으로 분류합니다.
문자열 my_string 이 매개변수로 주어질 때
모음을 제거한 문자열을 return 하도록 solution 함수를 완성해 주세요.
❓ 나의 풀이
function solution(my_string) {
const vowels = ["a", "e", "i", "o", "u"];
let answer = [];
let strArr = my_string.split('');
for (let i = 0; i < strArr.length; i++) {
if (!vowels.includes(strArr[i])) answer.push(strArr[i]);
}
return answer.join('');
}
반복문과 조건문, split 과 join 그리고 includes 메소드를 이용해서 문제를 풀었다.
우선, 영어에서 모음은 a, e, i, o, u 5개가 전부니까 모음 변수를 하나 만들었다.
그리고 문자열을 분해해서 모음인지 구별해야 되기 때문에 split 메소드를 사용해서 문자열을 배열로 바꿔주었다.
이때, 그냥 my_string.split() 이라고 작성하면 ["bus"] 이렇게 반환해 주기 때문에
우리가 원하는 배열로 만들기 위해서는 my_string.split(' '); 이렇게 빈 문자열을 기준으로 나뉘게끔 작성해주어야 한다.
그러면 ["b","u","s"] 이렇게 모든 문자를 요소로 가지게 되는데,
이 요소를 반복문을 이용해서 순회하고, 조건문을 이용해서 모음인지 아닌지 판단했다.
배열의 요소가 포함되어 있는지 확인할 수 있는 includes 메소드를 사용해서
만약, voewls 가 strArr[i] 를 포함하고 있지 않다면 빈 배열 answer 에 해당 요소를 push 해줬다.
["b","u","s"] 를 예로 들면, strArr[1] = "u" 가 vowels 에 포함되어 있고, 나머지는 포함되어 있지 않다.
그래서 "b" 와 "s" 만 answer 에 push 된다.
그리고 문제에서는 문자열을 return 하라고 했기 때문에
배열을 문자열을 바꿔주기 위해서 join 메소드를 이용했다.
이때 그냥 answer.join() 이라고 작성하면 "b,s" 이렇게 반환해 주기 때문에
우리가 원하는 문자열로 만들기 위해서는 answer.join(' ') 이렇게 빈 문자열을 기준으로 작성해주어야 한다.
++) 다른 사람 풀이 - 정규 표현식
function solution(my_string) {
return my_string.replace(/[aeiou]/g, '');
}
대박이당
정규 표현식을 사용한 풀이인데, 이해하고 싶어서 정규표현식에 대해 서칭해봤다.
일단 슬래시("/") 로 감싸진 부분이 정규 표현식이다.
대괄호 안에 있는 문자는 "문자 클래스" 라고 하며, 대괄호 안의 문자들 중 하나와 일치하는 것을 찾는다.
문제를 예로 들면, [aeiou] 는 "a", "e", "i", "o", "u" 중 하나와 일치하는 모든 문자를 찾는 것이다.
"bus" 에서
- 첫 번째 문자 "b" 는 [aeiou] 에 포함되지 않으니까 무시하고
- 두 번째 문자 "u" 는 [aeiou] 에 포함되니까 일치하고
- 세 번째 문자 "s" 는 [aeiou] 에 포함되지 않으니까 무시한다.
정규 표현식 끝에 붙은 "g" 는 "global" 의 약자이다.
이 플래그가 있으면 문자열 전체에서 패턴과 일치하는 모든 부분을 찾고,
없으면 처음 일치하는 한 부분만 찾고 종료한다.
replace 메서드는 첫 번째 매개변수에 해당하는 부분을 두 번째 매개변수로 대체한다.
우리는 replace 의 첫 번째 매개변수에서 정규표현식을 이용해 일치하는 부분 "u" 를 찾아냈다.
그러면 그 일치하는 부분을 빈 문자열로 대체하는 것이다.
그래서 결론적으로 u 가 제거되고 "bs" 만 남게 되는 것이다.
💡 정리
1. split()
str.split(separator, limit)
문자열을 나눠서 배열로 만드는 메소드
- separator(옵션): 문자열을 나눌 때 사용할 구분자
- 지정하지 않을 경우: 원본 문자열이 유일한 요소
- 빈 문자열(" "): 모든 문자를 요소로 가짐
- 등등
- limit(옵션): 문자열을 나눌 때 생성되는 배열의 최대 길이를 제한하는 정수
- 예시
const str = "월요일,화요일,수요일,목요일,금요일";
const strArr1 = str.split(",");
console.log(strArr1); // [ "월요일", "화요일", "수요일", "목요일", "금요일" ];
const strArr2 = str.split("");
// 쉼표도 요소로 반환되는 것을 알 수 있다.
console.log(strArr2); // [ '월', '요', '일', ',', '화', '요', '일', ',', '수', '요', '일', ',', '목', '요', '일', ',', '금', '요', '일' ]
2. join()
arr.join(separator)
배열을 합쳐서 문자열로 만드는 메소드
- separator(옵션): 배열 요소를 연결할 구분자
- 문자열로 지정한다.
- 생략하면 쉼표( , )가 사용된다.
- 예시
const arr = ["안녕", "하세요", "반갑습니다"];
const arrStr1 = arr.join();
console.log(arrStr1); // 안녕,하세요,반갑습니다
const arrStr2 = arr.join("");
console.log(arrStr2); // 안녕하세요반갑습니다
const arrStr3 = arr.join(" ");
console.log(arrStr3); // 안녕 하세요 반갑습니다
const arrStr4 = arr.join("-");
console.log(arrStr4); // 안녕-하세요-반갑습니다
3. includes()
문자열, 배열 둘 다 사용가능하다.
문자가 포함되어 있는지, 배열의 요소가 포함되어 있는지 확인할 수 있는 메소드
- 예시
// 문자열
const str = "안녕하세요, 다들 더위 조심하세요!";
console.log(str.includes("안녕")); // true
console.log(str.includes("더위")); // true
console.log(str.includes("여름")); // false
// 배열
const arr = [1, 2, 3, 4, 5];
console.log(arr.includes(2)); // true
console.log(arr.includes(9)); // false
console.log(arr.includes(5)); // true
'코딩테스트 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 7의 개수 (Level 0, JavaScript) (0) | 2024.08.05 |
---|---|
[프로그래머스] 커피 심부름 (Level 0, JavaScript) (0) | 2024.07.31 |
[프로그래머스] 배열 만들기 3 (Level 0, JavaScript) (0) | 2024.07.26 |
[프로그래머스] 특정한 문자를 대문자로 바꾸기 (Level 0, JavaScript) (0) | 2024.04.30 |
[프로그래머스] rny_string (Level 0, JavaScript) (0) | 2024.04.30 |