문자열안에 문자열
문제 설명
문자열 str1, str2가 매개변수로 주어집니다. str1 안에 str2가 있다면 1을 없다면 2를 return하도록 solution 함수를 완성해주세요.
제한사항
- 1 ≤
str1의 길이 ≤ 100
- 1 ≤
str2의 길이 ≤ 100
- 문자열은 알파벳 대문자, 소문자, 숫자로 구성되어 있습니다.
입출력 예
| str1 |
str2 |
result |
| "ab6CDE443fgh22iJKlmn1o" |
"6CD" |
1 |
| "ppprrrogrammers" |
"pppp" |
2 |
| "AbcAbcA" |
"AAA" |
2 |
입출력 예 설명
입출력 예 #1
- "ab6CDE443fgh22iJKlmn1o"
str1에 str2가 존재하므로 1을 return합니다.
입출력 예 #2
- "ppprrrogrammers"
str1에 str2가 없으므로 2를 return합니다.
입출력 예 #3
- "AbcAbcA"
str1에 str2가 없으므로 2를 return합니다.
나의 풀이
function solution(str1, str2) {
let answer;
const str2Reg = new RegExp(str2, 'g');
if(str1.match(str2Reg)){
answer = 1;
}
else answer = 2;
return answer;
}
str2를 전역 탐색 플래그인 g와 함께 정규표현식 객체로 만들어 str2Reg에 저장하고, 이를 match()메서드를 이용하여, str1에 str2가 있는지 확인하는 방법
- 문자열이 변수에 저장되어 있기 때문에
new RegExp를 사용하여 정규표현식 객체로 만들 수 밖에 없었다.
- 이제 와서 보니 이 문제에서는
str2가 str1안에 있는지, 없느지 여부만 판단하면 되기 때문에 전역 탐색 플래그인 g는 사용할 필요가 없는 것 같다.
- 하지만 이처럼 단순히 하나의 문자열이 다른 문자열 안에 있는지 없는지만 판별할 때에는 굳이 정규표현식을 사용하지 않아도 되었다.
나중에 알게된 방법
includes()
function solution(str1, str2) {
const answer = str1.includes(str2) ? 1:2;
return answer;
}
includes()메서드는 하나의 문자열이 다른 문자열에 포함되어 있는지를 판별하고, 그 결과를 true 또는 false로 반환한다.
- 왜인지 모르겠는데 처음에
includes()메서드를 문자열이 아닌 문자 하나만 사용할 수 있는 줄 착각해 사용하지 않았다.
- 문자열 안에 다른 문자열이 있는지 알고 싶은 경우 정규표현식을 사용하지 않고도 간단하게 판별할 수 있어 아주 유용할 것 같다.
match()
function solution(str1, str2) {
const answer = str1.match(str2) ? 1:2;
return answer;
}
match()메서드는 매개변수로 정규표현식을 받아 문자열을 일치시킨 결과를 검색하고, 그 결과를 Array 또는 null로 반환한다.
- 이번에 알게 되었는데 매개변수로 정규표현식이 아닌 문자열이나 숫자가 오는 경우 내부적으로 정규표현식으로 변환되어 사용된다고 한다.
- 그래서 위의 식처럼 사용해도 문제가 없는 것.
- 조건 판별은
Array가 반환되면 Truthy, null이 반환되면 Falsy
- 단순히 검색만 하고 싶은 경우에는 편하게 문자열이나 숫자를 매개변수로 바로 사용하고, 정규표현식의 플래그를 통해 여러 조건을 주고 싶은 경우에는 문자열이나 숫자를 정규표현식 객체로 직접 변환해 사용하면 될 것 같다.