코딩테스트/프로그래머스
옹알이 (1) (c++)
shin0112
2024. 1. 12. 00:03
입력 : vector
- 1 <=
babbling
의 길이 <= 100 - 1 <=
babbling[i]
의 길의 <= 15
sol
1. for 문으로 babbling 내부 string 값 가져오기
2. for 문으로 string에 "aya", "ye", "woo", "ma" 있는지 확인하기
고민
나는 인덱스 하나마다 접근하면서 검사했었는데, 약간 지저분해 보이고 하드코딩 같다는 생각이 든다.
다른 분이 string을 따로 만들어서 s[i] 값을 더한 다음에, 조건을 만족하면 초기화하는 방식으로 해결한 것을 보았다.
훨씬 더 깔끔해보이는 코드!
+) 추가
string을 사용해서 더하는 방식으로 풀어봤는데, 시간 차이가 꽤 존재했다. 오히려 내가 풀었던 코드가 더 빠른데, 왤까..?
int solution(vector<string> babbling) {
int answer = 0;
string temp = "";
for (int i = 0; i < babbling.size(); i++) {
temp = "";
for (int j = 0; j < babbling[i].size(); j++) {
temp += babbling[i][j];
if (temp == "aya" || temp == "ye" || temp == "woo" || temp == "ma") temp = "";
if (temp.size() > 3) break;
}
if (temp == "") answer++;
}
return answer;
}
vector indexing | string += | string push_back |
vector random access : O(1) | string append : O(1) * append나 +=는 더하는 문쟈열의 길이만큼 시간복잡도를 가지지만 여기서는 1글자만 더하니까 1로 취급 |
string push_back : O(1) |
![]() |
![]() |
![]() |
변수에 접근할 때의 시간복잡도는 동일한 걸로 봐서 접근에 문제는 아닌 것 같다.
일단 생각이 나는 건 이 정도..?
- 조건에 and를 사용해서 빠르게 if문을 넘겼다.
- temp에 빈 문자열을 넣을 때, string이 새로 만들어져서 시간이 걸린다.
shin0112/programmers_cpp: programmers' coding test solutions (github.com)
출처 : 프로그래머스 코딩 테스트 연습 - 옹알이 (1)
코딩테스트 연습 - 옹알이 (1) | Programmers School