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