프로그래머스 LV1 "문자열 다루기 기본"
프로그래머스 LV1 문자열 다루기 기본
기초부터 다시 공부를 하기위해 프로그래머스 라는 사이트에서 코딩테스트를 LV0 부터 가능한곳까지 못하는곳은 레퍼런스를 찾아가며 풀어보려고 합니다.
매일 1개의 풀이를 하고 그 풀이에대한 나의 생각 및 해석을 적어보려합니다.
오늘은 LV1 문제 ‘문자열 다루기 기본’ 문제입니다.
위 이미지가 프로그래머스 코딩문제입니다.
문제는 매개변수로 문자열인 s
를 입력받아, 해당 문자열이 조건에 부합하는지 확인해 맞으면 true
를 아니면 false
를 출력하는 문제입니다.
그럼 오늘의 문제를 한번 풀어보겠습니다.
기본 세팅 코드도 알아보겠습니다.
1
2
3
4
function solution(s) {
var answer = true;
return answer;
}
기본 세팅 코드는 매개변수 s
가 입력되고 함수 안에는 answer
이라는 변수가 선언되어 리턴하는 간단한 기본 세팅 코드입니다.
오늘 문제의 핵심은 주어진 조건이 무엇인지 파악하고 그 조건을 체크하는 함수를 만드는것 입니다.
문제를 해결하기 위해, 우리는 다음과 같은 조건을 확인해야 합니다:
- 문자열 s의 길이가 4 또는 6인지 확인합니다.
- 문자열 s가 오직 숫자로만 구성되어 있는지 확인합니다.
위 조건을 달성하기 위해 이번 문제에서 저는 정규식
을 사용해 문자열이 오직 숫자로만 구성되어있는지 확인해보겠습니다.
이전 포스팅에서 한번 설명 드렸지만 다시 정규식이 무엇인지 설명드리겠습니다.
정규 표현식
정규 표현식(Regular Expression)은 특정한 패턴을 표현하기 위한 문자열입니다. 주로 문자열을 검색하거나 특정한 패턴을 찾을 때 사용됩니다. 예를 들어, 이메일 주소, 전화번호, 혹은 특정한 형식의 문장을 찾거나 변형할 때 유용하게 사용될 수 있습니다.
정규 표현식은 다양한 문자와 기호들의 조합으로 이루어집니다. 예를 들어:
.
: 어떤 문자 하나와 일치합니다.*
: 앞에 있는 패턴이 0번 이상 반복되는 부분과 일치합니다.+
: 앞에 있는 패턴이 1번 이상 반복되는 부분과 일치합니다.?
: 앞에 있는 패턴이 0번 또는 1번 등장하는 부분과 일치합니다.[]
: 괄호 안에 있는 문자 중 하나와 일치합니다.()
: 그룹을 나타내며, 일치하는 부분을 추출할 수 있습니다.\d
: 숫자 하나와 일치합니다.\w
: 문자나 숫자와 일치합니다.
예를 들어, 이메일 주소를 찾는 패턴을 만들어보면 다음과 같습니다: \b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b
이 패턴은 이메일 주소의 일반적인 형식을 나타냅니다.
하지만 정규 표현식은 간단한 것부터 복잡한 것까지 다양하게 작성될 수 있습니다.
아래는 정규 표현식을 정리한 간단한 테이블 입니다.
패턴 | 설명 | 예시 |
---|---|---|
\d | 숫자에 대응 | “123”, “456” 등 |
\D | 숫자가 아닌 문자에 대응 | “hello”, “world” 등 |
\w | 문자에 대응 (알파벳, 숫자, 밑줄) | “hello”, “world_123” 등 |
\W | 문자가 아닌 것에 대응 | ”@”, “&” 등 |
\s | 공백 문자에 대응 | ” “, “\t”, “\n” 등 |
\S | 공백이 아닌 문자에 대응 | “hello”, “world” 등 |
^ | 문자열의 시작 부분에 대응 | “^hello”는 “hello world”에 대응하지만 “world hello”에는 대응하지 않음 |
$ | 문자열의 끝 부분에 대응 | “world$”는 “hello world”에 대응하지만 “world hello”에는 대응하지 않음 |
. | 임의의 문자에 대응 | “a”, “b”, “1”, “$” 등 |
[abc] | 괄호 안에 있는 문자 중 하나에 대응 | “a”, “b”, “c” 중 하나에 대응 |
[^abc] | 괄호 안에 없는 문자에 대응 | “d”, “e”, “f” 등 |
[a-z] | a부터 z까지의 모든 소문자 알파벳에 대응 | “a”, “b”, …, “z” 등 |
[0-9] | 0부터 9까지의 모든 숫자에 대응 | “0”, “1”, …, “9” 등 |
* | 앞의 패턴이 0번 이상 반복되는 것에 대응 | “aaa”, “a”, “” 등 |
+ | 앞의 패턴이 1번 이상 반복되는 것에 대응 | “aaa”, “aa”, “a” 등 |
? | 앞의 패턴이 0번 또는 1번 나오는 것에 대응 | “a”, “” 등 |
{n} | 앞의 패턴이 n번 나오는 것에 대응 | “aaa”, “111” 등 |
{n,} | 앞의 패턴이 최소 n번 이상 나오는 것에 대응 | “aaa”, “1111” 등 |
{n,m} | 앞의 패턴이 최소 n번 이상 최대 m번 이하로 나오는 것에 대응 | “aaa”, “111”, “1111” 등 |
(pattern) | 괄호 안의 패턴을 그룹화하여 대응 | “abc”, “def” 등 |
\b | 단어 경계에 대응 | “\bword\b”는 “word”에 대응하지만 “keyword”에는 대응하지 않음 |
\B | 단어 경계가 아닌 부분에 대응 | “keyword” 등 |
(?=…) | 전방 탐색 (뒤에 …)이 오는 경우에 대응 | “good(?=bye)”는 “goodbye”에 대응하지만 “goodnight”에는 대응하지 않음 |
(?!…) | 부정형 전방 탐색 (뒤에 …)이 오지 않는 경우에 대응 | “good(?!bye)”는 “goodnight”에 대응하지만 “goodbye”에는 대응하지 않음 |
(?<=…) | 후방 탐색 (앞에 …)이 오는 경우에 대응 | ”(?<=hello)world”는 “helloworld”에 대응하지만 “world”에는 대응하지 않음 |
(?<!…) | 부정형 후방 탐색 (앞에 …)이 오지 않는 경우에 대응 | ”(?<!hello)world”는 “world”에 대응하지만 “helloworld”에는 대응하지 않음 |
[가-힣] | 한글에 대응 | “안녕하세요”, “한글” 등 |
[ㄱ-ㅎㅏ-ㅣ] | 자음과 모음에 대응 | “가나다라마바사아자차카타파하” 등 |
[가-힣ㄱ-ㅎㅏ-ㅣ] | 한글, 자음, 모음에 대응 | “안녕하세요”, “가나다라”, “ㅏㅑㅓㅕㅣ” 등 |
그럼 오늘 문제의 풀이를 코드로 한번 작성해 보겠습니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function solution(s) {
var answer = true;
var regex = /^[0-9]+$/;
if(s.length == 4||s.length == 6){
if(regex.test(s)){
answer = true;
}else {
answer = false;
}
}else {
answer = false;
}
return answer;
}
위 코드의 간단한 설명을 알려드리겠습니다.
함수
solution
은 문자열s
를 입력으로 받습니다.변수
answer
는 기본적으로true
로 초기화됩니다.정규 표현식
regex
는 숫자만 포함하는 문자열을 확인하기 위해 정의됩니다(/^[0-9]+$/)
.if
조건문을 사용하여s
의 길이가 4 또는 6인지 확인합니다.- 길이가 4 또는 6이면, 정규 표현식
regex
를 사용하여s
가 숫자로만 이루어져 있는지 확인합니다. - 숫자로만 이루어져 있으면
answer
는true
로 유지됩니다. - 그렇지 않으면
answer
는false
로 설정됩니다. - 길이가 4 또는 6이 아니면,
answer
는false
로 설정됩니다.
- 길이가 4 또는 6이면, 정규 표현식
마지막으로,
answer
를 반환합니다.완성된
row
배열을answer
배열에 추가합니다.- 최종적으로 완성된
answer
배열을 반환합니다.
그럼 문제의 식이 완성되었으니 프로그래머스에 한번 확인해보겠습니다.
성공이네요!
오늘은 프로그래머스 LV1 ‘문자열 다루기 기본’ 문제의 대해서 알아봤습니다.
제 방법이 꼭 정답은 아니니 그저 이런방법도 있구나하고 참고용으로만 봐주시면 감사하겠습니다.
감사합니다.