inflearn logo
강의

講義

知識共有

10週間完成 C++ コーディングテスト | アルゴリズムコーディングテスト

[必須概念] split() 関数

백준 1152질문

540

spqjdl68338908

投稿した質問数 11

0

선생님 눈뜨고쓸정도로 스플릿외워서 이때다싶어 사용했습니다만 바로 시간초과가 뜨네요 ㅜ

http://boj.kr/c6c01ff909ca445dbb0b4a283faf9b02

이게 제가 한 링크고

#include <bits/stdc++.h>

using namespace std;

int main() {

string s;

int a = 1;

getline(cin, s);

for (int i = 0; i < s.length(); i++) {

if (isspace(s[i])) {

if (s.length() == 1) { cout << 0; return 0;}

else if (i > 0 && isspace(s[i - 1])) { cout << 0; return 0;}

else if (i == 0 || i == s.length() - 1) continue;

else a++;

}

}

cout << a;

return 0;

}

이건 통과되는 다른사람껀데 아무리봐도 이해가 잘 안되네요 ㅜㅜ 알려주십셔

c++ 코딩-테스트

回答 2

0

spqjdl68338908

감사합니다 주의하겠습니다!

0

kundol

안녕하세요 ㅎㅅ님 ㅎㅎ

강의 외의 문제에 대한 질문은 받지 않습니다.

그래도 이번만은 알려드리겠습니다.

split은 이처럼 find() 가 계속해서 있는 함수입니다. 즉, 해당 문자열을 계속해서 찾는 연산이 들어가게 되는데 이 시간복잡도가 O(N)입니다.

	string token = "";
	while((pos = input.find(delimiter)) != string::npos){

근데 이 문제의 최대 문자열의 길이는 100만이기 때문에 100만짜리를 계속해서 찾기 때문에 시간초과가 뜨는 것입니다.

이 문제는 그냥 띄어쓰기만을 찾으면 되고 그러한 로직이라면 해당 문자열을 한번만 순회하면 되는 식의 코드를 구축하는게 가장 효율적입니다.

 

감사합니다.

DP 경우의 수 설명이 이해가 되지 않습니다.

0

7

1

3-F 채점 관련 질문

0

15

1

BFS, DFS 활용이 되는 상황에서의 방향성

0

19

2

코딩살구클럽 승인

0

24

2

코딩살구클럽승인

0

22

3

코딩살구클럽 승인

0

43

2

3-D 관련 질문

0

33

2

코살구 회원가입 문의

0

40

2

코살구 로그인 문제

0

61

2

3-A 문제 풀이 관련 질문

0

52

3

2-O 질문 있습니다

0

38

2

2-T 문제에 관한 질문

0

39

2

코딩 살구 클럽 접속 및 사용방법 문의

0

59

2

안녕하세요~. 현재 코살코딩클럽 사이트가 접속이 안됩니다~

0

64

2

코딩살구클럽 로그인문제

0

74

3

코딩 살구 클럽 로그인 문제

0

79

2

2-J 채점관련 질문

0

65

3

코딩 살구 클럽 Python 지원 가능 여부

0

77

1

살구클럽 아이디 없음 문제

0

76

1

1-O 코딩살구클럽 채점관련 질문

0

60

2

히든 테스트 케이스가 사라졌습니다

0

57

1

채점서버 혹시 다른 언어 지원도 가능하게 해주실 수 있나요

1

74

2

살구 클럽 채점 관련 문의(테스트 케이스)

0

66

2

1-H 문제 채점하기 오류

0

58

3