(TIL) 20210629
2021. 6. 29. 11:22ㆍTIL(Today I learned)
반응형
📕Facts(한 것)
- 백준 문제 풀기
- 프로그래머스 문제 풀기
- C++ 책 읽으며 공부하기
- 스프링 복습
📕Feeling(느낀 점)
#include <string>
#include <vector>
#include <iostream>
#include <regex>
#include <algorithm>
using namespace std;
bool solution(vector<string> phone_book) {
bool answer = true;
sort(phone_book.begin(), phone_book.end());
smatch m;
regex e;
for(int i = 0; i < phone_book.size()-1; i++){
e = phone_book[i];
if(regex_search(phone_book[i+1], m, e) && (m.suffix().length() + m.length()) == phone_book[i+1].length()){
return false;
}
}
return true;
}
오늘 프로그래머스 문제 중 "전화번호 목록"이라는 문제를 풀었다.
해시를 이용해서 푸는 문제인데, 아직 c++의 해시맵인 unordered_map 라이브러리에 익숙하지 않고
이 기회에 정규표현식이나 익히자 해서 정규표현식으로 문제를 풀었다.
(다음기회에 정규표현식에 대해서 포스팅 하겠다.)
이 문제 풀이의 핵심은 sort함수와 rege_search함수인데,
sort함수의 경우 문자열 정렬은 사전순으로 자동 정렬되기 때문에,
prefix와 prefix가 포함된 문자열 딱 하나만 비교해서, false인 결과를 얻어낼 수만 있다면
여러번 비교할 필요가 없다.
처음에는 이중 for문을 사용해서 효율성 3,4번에서 시간초과가 발생했는데,
이렇게 단순 비교형식으로 for문을 구성한다면, 훨씬 빠르게 비교할 수 있다.
regex_search함수를 통해서, preffix가 발견된 경우
발견된 위치가 postfx위치가 아니라 prefix위치여야 하기때문에
m.suffix()함수와 m.length()의 길이 합이 비교 대상이 되는 문자열의 길이와 같은지를 확인한다.
같으면 prefix인 e가 phone_book[i+1]의 prefix인 것이 성립되므로
false를 리턴한다.
📕Affirmation(자기 선언)
- 인생은 그리디처럼!
📕여담
반응형
'TIL(Today I learned)' 카테고리의 다른 글
(TIL) 20210701 (0) | 2021.07.01 |
---|---|
(TIL) 20210630 (0) | 2021.06.30 |
(TIL) 20210628 (0) | 2021.06.28 |
(TIL) 20210627 (0) | 2021.06.27 |
(TIL) 20210626 (0) | 2021.06.26 |