inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

1-K

백준1213번 질문입니다!

423

박 경범

작성한 질문수 5

0

#include <iostream>
#include <string>

using namespace std;

string s, ret;
int cnt[200], flag;
char mid;

int main() {
	cin >> s;
	for (char a : s)cnt[a]++;
	for (int i = 'Z'; i >= 'A'; i--) {
		if (cnt[i]) {
			if (cnt[i] % 2 == 1) {
				mid = char(i); flag++;
				cnt[i]--;
			}

			if (flag == 2)break;
			for (int j = 0; j < cnt[i]; j += 2) {
				ret = char(i) + ret;
				ret += char(i);
			}
		}
	}
	// if (mid) ret.insert(ret.begin() + ret.size() / 2, mid);
	if (flag == 2) cout << "I'm Sorry Hansoo\n";
	else cout << ret << "\n";

	return 0;
}

위는 강사님이 작성해주신 코드인데

주석 처리한 insert 함수에서

어차피 ret.begin( )은 항상 0인데 반드시

넣어주어야 하는 것인지 알고싶습니다!

#include <iostream>
#include <string>
#include <algorithm>

using namespace std;
string N, R;
int e = 1;

int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin >> N;
	sort(N.begin(), N.end());
	do {
		R = N;
		reverse(R.begin(), R.end());
		if (R == N) {
			cout << N;
			e = 0;
			break;
		}
	} while(next_permutation(N.begin(), N.end()));

	if(e) cout << "I'M Sorry Hansoo";

	return 0;
}

추가적으로 위는 제가 작성한 코드인데

왜 시간초과가 발생하는 것인지 잘 모르겠습니다.

 

C++ 코테 준비 같이 해요!

답변 2

0

박 경범

순열의 시간복잡도에 대해 생각해보았는데..

최대 O(n!)의 시간복잡도를 가지고,

문자열 최대길이가 50이니.. 그럼 최대 시간복잡도는

50!이 맞을까요?

1

큰돌

맞습니다! 50!는 너무 크기 때문에 시간초과가 나는 것이죠.

https://www.calculatorsoup.com/calculators/discretemathematics/factorials.php

이 링크를 타고 가셔서 50!가 어느정도인지 확인해주세요. ㅎㅎ

감사합니다.

0

큰돌

안녕하세요 박경범님 ㅎㅎ

예리하시네요.

근데 vector의 insert라는 함수는 다음과 같이 되어있습니다. 첫번째 인자에 iterator형이 들어가야 해요.

begin은 이터레이터이며 해당 변수의 첫번째 주소를 가리킵니다.

iterator insert (iterator position, const value_type& val);

첫번째 주소로 부터~~ 가운데 주소를 가리키기 위해서 begin() + ret / size()로 설정한 거에요.

insert를 쓰실 때는(vector)에서 꼭 begin() + n 이런식으로 쓰시는 것을 기억해주세요. 해당 부분 교안에도 추후 반영해 놓겠습니다. :) / 예를 들어 첫번째 자리에 삽입해야 한다? 그러면 begin() / 3번째 자리다? 그러면 ret.begin() + 3이겠죠?

 

경범님의 코드. 정말 간단한 코드인데요. 순열을 사용하셨죠?

자 근데 이 문제의 최대 문자열의 길이는 얼마일까요? 50이죠.

근데 여기서 순열을 사용하면 최대 시간복잡도는 얼마일까요?

 

감사합니다.

 

1-E질문입니다!

0

531

2

3-L 틀린 부분 피드백 부탁드립니다.

0

833

2

1-A문제 순열재귀함수 질문입니다.

0

396

1

1-A 일곱난쟁이문제입니다

0

467

1

문제 풀 때 방향성에 대해

0

809

1

맥에서 vs code로 실행 관련 질문입니다

0

530

1

17071번 메모리 초과

0

389

1

1-C질문입니다!

0

427

2

2-B BFS 시간초과질문

0

637

2

1-O 13번 라인

0

445

1

6-J 놀이공원 문제 질문

0

388

1

구현관련 질문

0

490

1

강의 교안

0

321

1

실력을 더 올리고나서 강의를 보는 것이 맞을까요?

0

550

1

안녕하세요! 재귀함수에 관해서 질문드립니다

0

539

1

1-K

0

481

2

3-G번 질문있습니다.

1

479

3

3-C 실행 시간 질문드립니다.

0

502

1

4-A 문제 풀이 질문있습니다.

0

601

2

비트마스킹 연산자 "1의 보수" 영문 표기법

0

441

1

격자탐색 문제에서 BFS 시간복잡도 질문드립니다.

0

348

1

3-O go 함수 질문 드립니다.

1

452

2

4-A 출력 질문

0

306

1

1주차 1-O 질문드립니다

0

263

1