inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

1-K 질문드립니다!

175

soobinm10

작성한 질문수 1

0

안녕하세요 강사님! 우선 강사님이 풀이하신 코드는 참고하였고, 제가 한 방식보다는 훨씬 효율적이고 이해하기 쉬운 코드였습니다.

다만, 제 코드는 왜 안되는지 이해는 하고 넘어가고 싶어서 질문 남깁니다ㅠㅠ 반례체크 하였고 타 온라인 프로그램에서 실행했을때 잘 나오는데 어디가 잘못 된건지 찾지를 못하겠어서요.. 알려주시면 정말 감사하겠습니다ㅠㅠ!!

 

using namespace std;

#include <iostream>

#include <map>

 

string name;

int front, back, count = 0;

char mid;

map<char,int> alpha;

bool possible = true;

int main() {

    cin >> name;

    string ret = "";

    char palindrome[name.length()];

    map<char,int>::iterator it;

    for(char c : name) {

        alpha[c]++;

    }

    // 이름길이가 짝수 일 경우

    if(name.length() % 2 == 0) { 

        it = alpha.begin();

        while(it != alpha.end()) {

            // 홀수 존재하면 안됌

            if(it->second % 2 != 0) {

                possible = false;

            }

            it++;

        }

        if(possible) {

            front = 0, back = name.length()-1;

            for(it = alpha.begin(); it != alpha.end(); it++) {

                while(it->second > 0) {

                    palindrome[front] = it->first;

                    palindrome[back] = it->first;

                    front++, back--, it->second -= 2;

                }

            }

        }

    }

    // 이름길이가 홀수 일 경우

    else {

        it = alpha.begin();

        while(it != alpha.end()) {

            if(it->second % 2 != 0) {

                // 홀수 한개만 존재 가능

                if(count > 1) {

                    possible = false;

                }

                else {

                    mid = it->first;

                    it->second--;

                    count++;

                }

            }

            it++;

        }

        if(possible) {

            front = 0, back = name.length()-1;

            for(it = alpha.begin(); it != alpha.end(); it++) {

                while(it->second > 0) {

                    palindrome[front] = it->first;

                    palindrome[back] = it->first;

                    front++, back--, it->second -= 2;

                }

            }

            palindrome[name.length()/2] = mid;

        }

    }

    if(possible) {

        for(int i = 0; i < name.length()-1; i++) {

            ret += palindrome[i];

        }

        cout << ret << "\n";

    }

    else {

        cout << "I'm Sorry Hansoo" << "\n";

    }

    

    return 0;

}

틀린이유 코테 준비 같이 해요! C++

답변 1

0

큰돌

이미지로.. 코드를 주시면... 제가 어떻게 할 수가 없어요. 에디터에서 복붙해주세요. :)

0

soobinm10

앗 죄송합니다ㅜㅜ 수정했어요

0

큰돌

반례 AA 입니다. A가 나오네요.

확인해보세요 :)

 

감사합니다. 

큰돌 올림.

0

soobinm10

정말 감사합니다!ㅠㅠ

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