튜플 in 프로그래머스
2019 카카오 개발자 겨울인턴십 기출
https://programmers.co.kr/learn/courses/30/lessons/64065
정규표현식 찾아내기
/[0-9,]+/g
- {}로 감싸인 내부만 찾아내기 위해 숫자와 쉼표가 연속되는 부분을 찾아주었다.
쉼표만 있는 부분도 함께 추출됐다. 반드시 하나 이상의 숫자로 시작하는 부분을 추가해주어야 한다!
/([0-9]{1,}[,0-9]?)+/g
- (하나 이상의 숫자에, 쉼표와 숫자가 뒤이어 올 수도 있는) 덩어리가 반복되는 것을 찾아낸다. 색칠된 부분을 보면 연속된 문자열을 한 덩어리로 보지 않고 덩어리를 나누어 인식하되, 반복되는 것으로 찾는 것을 볼 수 있다.
/[0-9]{1,}([,0-9]?)+/g
- (하나 이상의 숫자로 시작하고) (쉼표와 숫자가 여러 덩어리 올 수도 있는) 것으로 찾아보았다. 원하는 문자열을 한 덩어리로 인식한다! 의도에 조금 더 가까워진 것 같다.
/[0-9]([,0-9]?)+/g
- 뒷부분에서도 숫자가 반복되기 때문에, (하나 이상의) 조건을 지워보았다. 마찬가지로 작동한다.
20
, 1 1 1
과 2
0 , 1 1 1
의 차이라고 생각한다.
의미적으로 표현해보기
찾아내고자 하는 부분은 다 찾아냈지만, 정규표현식만 보고도 내가 찾아내고자 했던 부분을 의미적으로 이해할 수 있도록 표현하고 싶어서 조금 더 다듬어보았다.
원래 찾고 있던 것은 "한 자릿수 이상의 숫자"들이, "하나 이상일 경우 쉼표로 연결되어 있는" 것이므로!
즉, "숫자" + (", 숫자" + ", 숫자" + ...)
"숫자" + (", 숫자"의 반복) 을 찾아내고 싶었다!
/[0-9]([,]?[0-9]?)+/g
- 숫자로 시작하고, 뒤에 (쉼표와 숫자)가 여러 개 오거나 오지 않는 것을 표현하고 싶었다. 원하는 결과값을 얻긴 하지만 정확한 표현은 아니라고 생각했다.
/[0-9]{1,}(,[0-9]{1,})+/g
- 하나 이상의 숫자로 시작하고 (두 자릿수 이상의 숫자를 한 덩어리로 읽어내고)
- 이 다음에는 "
,
한 자릿수 이상의 숫자
"가 한 번 이상 반복되는 (+)
의 조건으로 찾아보았더니 숫자 하나만 존재하는 경우를 빠뜨렸다.
/[0-9]{1,}(,[0-9]{1,})*/g
- 하나 이상의 숫자로 시작하고 (두 자릿수 이상의 숫자를 한 덩어리로 읽어내고)
- 이 다음에는 "
,
한 자릿수 이상의 숫자
"가 0번 또는 그 이상 반복되는 (*)
의 조건으로 정확히 원하는 부분을 찾아서 표현할 수 있었다.