일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 부트캠프
- JavaScript
- 프론트개발공부
- 자바스크립트 split()
- 엘리스
- 프로그래머스
- HTML
- 자바스크립트
- 리트코드
- 삼항연산자
- 코딩부트캠프
- 프론트개발
- 자바스크립트 날씨 웹 만들기
- 개발일기
- 날씨 웹 만들기
- reactnativecli
- [AI 5기] 연습 문제집
- [파이썬 실습] 심화 문제
- [파이썬 실습] 중급 문제
- 자바스크립트 sort()
- 엘리스 AI 트랙 5기
- 자바스크립트 reduce()
- leetcode
- [파이썬 실습] 기초 문제
- 코드스테이츠
- 엘리스 ai 트랙
- 자바스크립트 날씨
- 개발공부
- 간단한 날씨 웹 만들기
- RN 프로젝트
- Today
- Total
개발조각
[프로그래머스] 문자열 다루기 기본 본문
이번에는 문자열 다루기 기본에 대해 풀어보았습니다.
이번 문제는 "정규식을 얼마나 알고 있어?"라고 물어보는 것만큼 정규식을 얼마나 알고 있는지 확인하는 문제인 것 같습니다.
프로그래머스에서 은근 정규식으로 풀라는 문제가 많은 것 같아요.😅
그만큼 실무에서 정규식을 많이 쓴다는 거겠죠????
이 문제에서 중요한 점은
- 문자열 s의 길이가 4 혹은 6
- 숫자로만 구성
이 두 문장이 중요합니다.
이 말은 위에 두 문자에 해당 될 경우에는 true, 아닐 경우는 false를 반환해주면 됩니다.
제가 푼 방법을 써놓긴 할건데 그냥 스쳐 지나가시길 바랍니다...
제가 푼방법보다는 다른 사람의 풀이 보기에서 본 방법이 더 좋을 것 같아서 2가지 방법으로 설명해보겠습니다.
해결방안
function solution(s) {
// 버전 1
if(s.length===4 || s.length===6) return s.match(/[^0-9]/) === null ? true : false;
else return false;
// 버전 2
const regex = /^\d{6}$|^\d{4}$/;
return regex.test(s);
}
버전 1 : 문자열s의 길이가 4 또는 6인지 확인한 후 정규식으로 숫자로만 구성되어있는지 확인하기
// 버전 1
if(s.length===4 || s.length===6) return s.match(/[^0-9]/) === null ? true : false;
else return false;
- s.length===4 || s.length===6 : 문자열s의 길이가 4 또는 6
문자열s의 길이가 4 또는 6이 아니면 return false;가 되어 false값을 반환하도록 하였습니다.
문자열s의 길이가 4 또는 6이면 return s.match(/[^0-9]/g) === null ? true : false;을 해주었는데요.
삼항 연산자
구문 : 조건 ? true : false
- 조건이 true이면 true를 실행
- 조건이 false이면 false를 실행
return s.match(/[^0-9]/) === null ? true : false;에서 조건인 s.match(/[^0-9]/) === null을 보면
/[^0-9]/g 정규식과 match()메서드가 있습니다.
/[^0-9]/
- [^] : []구간 안의 반대(부정)
- 0-9 : 0~9까지 \d와 같은 말입니다.
=> 0~9가 아닌거를 검색하기
정규식에 대한 설명은 아래 블로그에 잘 설명되어 있습니다.👇
https://heropy.blog/2018/10/28/regexp/
정규표현식, 이렇게 시작하자!
매일 쓰는 것도, 가독성이 좋은 것도 아니지만, 모르면 안되는 정규표현식. 저는 이렇게 공부하기 시작했습니다! (자바스크립트를 기준으로 설명합니다)
heropy.blog
match()메서드는 정규식에서 쓰이는 메소드 중입니다.
MDN Web Docs
match() 메서드는 문자열이 정규식과 매치되는 부분을 검색합니다.
문법 : str.match(regexp)
- regexp : 정규식 개체입니다. RegExp가 아닌 객체 obj가 전달되면, new RegExp(obj)를 사용하여 암묵적으로 RegExp로 변환됩니다. 매개변수를 전달하지 않고 match()를 사용하면, 빈 문자열:[""]이 있는 Array가 반환됩니다.
예제는 테스트 1, 테스트 2로 설명하겠습니다.
테스트 1 : s = "a234"
console.log(s.match(/[^0-9]/g)); // [ 'a' ]
테스트 2 : s = "1234"
console.log(s.match(/[^0-9]/g)); // null
그래서 return s.match(/[^0-9]/g) === null ? true : false;을 써주었습니다.
버전 2 : 정규식으로 문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성되어 있는지 확인하기
// 버전 2
const regex = /^\d{6}$|^\d{4}$/;
return regex.test(s);
이 방법은 다른 사람의 풀이 보기에서 본 코드인데요.
여기서는 "문자열 s의 길이가 4 혹은 6이고, 숫자로만 구성되어 있는지 확인" 이걸을 다 정규식으로 써주었습니다.
/^\d{6}$|^\d{4}$/
- ^ : 줄(Line)의 시작에서 일치, /^abc/
- {6} : 6(숫자)개 연속 일치
- $ : 줄(Line)의 끝에서 일치, /xyz$/
- \d : 0~9까지 숫자만
- | : 또는
=> 문자열 길이가 4 혹은 6이고, 숫자로만 구성되어 있는지 확인
test메서드는 정규식에서 쓰이는 메소드 중입니다.
MDN Web Docs
test() 메서드는 주어진 문자열이 정규 표현식을 만족하는지 판별하고, 그 여부를 true 또는 false로 반환합니다.
구문 : regexObj.test(str)
- str : 정규 표현식 일치를 수행할 문자열.
예제는 테스트 1, 테스트 2로 설명하겠습니다.
테스트 1 : s = "a234"
const regex = /^\d{6}$|^\d{4}$/;
return regex.test(s); // false
테스트 2 : s = "1234"
const regex = /^\d{6}$|^\d{4}$/;
return regex.test(s); // true
여기까지 프로그래머스 문자열 다루기 기본 해결방안에 대해 설명해보았습니다.
'알고리즘🅰 > 프로그래머스' 카테고리의 다른 글
[프로그래머스] 소수 찾기 (0) | 2022.02.23 |
---|---|
[프로그래머스] 서울에서 김서방 찾기 (0) | 2022.02.21 |
[프로그래머스] 문자열 내림차순으로 배치하기 (0) | 2022.02.18 |
[프로그래머스] 문자열 내 p와 y의 개수 (0) | 2022.02.17 |
[프로그래머스] 문자열 내 마음대로 정렬하기 (0) | 2022.02.17 |