inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

10주완성 C++ 코딩테스트 | 알고리즘 코딩테스트

[필수개념] split() 함수

백준 1152질문

567

ㅎㅅ

작성한 질문수 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

ㅎㅅ

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

0

큰돌

안녕하세요 ㅎㅅ님 ㅎㅎ

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

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

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

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

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

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

 

감사합니다.

코딩 살구클럽 가입 문의

0

66

2

코딩살구클럽 가입문의

0

69

2

3-K private case 질문

0

64

2

안녕하세요. 코딩살구클럽 문의드립니다!

0

77

2

7:41 듣다가 질문합니다

0

77

2

코드 리뷰 요청드립니다!

0

83

2

코딩살구클럽 계정 문의

0

79

2

SK하이닉스 대비 강의수강

0

217

3

코딩살구클럽 등록부탁드립니다.

0

78

2

7-F 재귀로 풀시 런타임애러

0

74

1

1-N 문제 질문입니다. (+ 채점오류)

0

82

2

코딩살구클럽 가입 확인 부탁드립니다.

0

86

2

직장인 코테 합격 공부방법 문의

0

127

2

코딩살구클럽 가입 방법

0

96

2

6-H 체점 관련 질문

0

74

1

채점서버 연결 관련 질문입니다

0

101

2

삼성 s직군

0

88

1

삼성 코테 없어짐

0

212

1

코딩살구클럽 가입부탁드립니다

0

87

2

코딩살구클럽 가입 요청 확인부탁드립니다

0

69

2

5-S 테스트 케이스 질문

0

78

2

코살 문제풀이 환경

0

88

2

2 - T 오큰수 문제가 있는 것 같습니다.

0

81

1

추천 추가문제들

0

74

2