inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

1-K 질문드립니다.

41

작성자 없음

0

#include <bits/stdc++.h>
using namespace std;

string name, result, pre, suf;
int cnt[26], c;
char a;

int main() {
    cin >> name;
    for(char c : name) {
        cnt[c-'A']++;
    }

    for(int i = 0; i < 26; i++) {
        if(cnt[i] % 2) {
            c++;
            a = 'A' + i;
        }
        if(c > 1) {
            cout << "I'm Sorry Hansoo\n";
            return 0;
        }
        while(cnt[i] / 2) {
            result += 'A' + i;
            cnt[i] -= 2;
        }
    }
    pre = result;
    reverse(result.begin(), result.end());
    suf = result;
    result = pre + a + suf;
    cout << result;
    return 0;

}
image.png

안녕하세요~ 예전 문제 풀어보다가,, 혹시 다음과 같이 코드를 구성했는데,
실제 출력과 기대 출력이 전부 같은데 왜 틀렸다고 나오는 걸까요?

c++ 코딩-테스트

답변 2

0

큰돌

안녕하세요 ㅎㅎ

원인은 char a;가 전역 변수라는 점입니다. 전역 변수는 자동으로 '\0'(널 문자)로 초기화됩니다.

그래서 홀수 개의 문자가 하나도 없는 경우에도

result = pre + a + suf;

가 실행되면서 가운데에 '\0'이 하나 추가됩니다.

'\0'은 화면에는 보이지 않기 때문에 출력 결과는 기대 출력과 똑같이 보이지만, 실제 문자열의 길이는 1만큼 더 길어집니다. 채점 서버는 문자열 자체를 비교하기 때문에 오답으로 처리됩니다.

예를 들어,

pre = "AB";
a = '\0';
suf = "BA";

라면 실제 result

"A" "B" '\0' "B" "A"

가 되어 길이가 5가 됩니다. 화면에는 ABBA처럼 보일 수 있지만, 내부적으로는 다른 문자열입니다.

따라서 홀수 문자가 있을 때만 가운데 문자를 추가하도록 작성하면 됩니다.

result = pre;
if (c == 1) result += a;
result += suf;

또는

result = pre + (c ? string(1, a) : "") + suf;

처럼 초기화 로직을 넣어서 작성하면 됩니다.


또 질문 있으시면 언제든지 남겨주세요.

좋은 수강평과 별점 5점은 제게 큰 힘이 됩니다. :)

감사합니다.

강사 큰돌 드림.

0

pvrkchan

감사합니다!!

0

인프런 AI 인턴

안녕하세요, 인프런 AI 인턴입니다. pvrkchan님께서 작성하신 코드에 대한 문제를 살펴보겠습니다. 이 문제는 주어진 문자열로 팰린드롬을 만들 수 있는지를 확인하고, 가장 앞에 오는 것을 출력하는 문제입니다.

코드에서 보이는 몇 가지 주요 포인트를 살펴보겠습니다:

  1. 홀수 개수의 문자 처리: 코드에서는 cnt[i] % 2로 홀수 개수의 문자들을 체크하고 있습니다. 팰린드롬을 구성할 때 중간에 넣을 수 있는 문자는 최대 1개이므로, 이러한 체크는 맞지만 중간에 문자를 더할 때 로직을 한 번 더 점검할 필요가 있습니다.

  2. 문자 결합: 결과를 나타내는 부분에서, result = pre + a + suf;라는 줄이 있습니다. ‘a’ 변수는 실제로 중간에 넣어질 문자입니다. 이 로직에 오류가 없는지, 특히 cnt 배열이 변하면서 ‘a’를 올바르게 유지하고 있는지 확인해 보세요.

  3. 정렬 필요성: 일반적으로 팰린드롬 문제에서는 첫 번째로 오는 가능한 사전을 출력해야 할 때 문자를 사전순으로 정렬하고 진행합니다. 이 코드에서는 명시적인 정렬이나 비교 작업이 없어 보입니다. 이 부분도 재확인하셔야 합니다.

  4. 마지막 출력 논리: 현재 cout << result;으로 출력을 하고 있으며, ‘a’를 중간에 추가하는 논리가 잘 작동하고 있어야 합니다. 그리고 노출된 이미지에 따르면, 테스트 케이스의 예상 출력과 일치한다 해도 전체 논리가 맞지 않는다면 오답 처리될 수 있습니다.

아래는 참고할 만한 관련 답변 링크입니다:

  • 백준 1213번 질문입니다! - 관련된 팰린드롬 문제에 대한 기존 질문입니다. 여기에는 팰린드롬 뿐만 아니라 성능 최적화 관련 조언도 포함되어 있습니다.

  • 안녕하세요. 1-K 문제 질문드립니다..! - 비슷한 맥락의 다른 수강생 질문으로, 입력 처리와 알고리즘의 작은 실수 때문에 발생했던 문제에 대한 설명이 포함되어 있습니다.

위 질문들을 참고하시어, 문제의 각 조건 및 문자열 순서를 어떻게 결정했는지를 검토한 다음, 전체 알고리즘을 확인해 보시기 바랍니다. 모든 조건이 충족되는지 확인하면, 코드의 어디서 문제가 발생했는지 확인하는 데 더 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

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

0

22

2

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

0

27

2

5-S 테스트 케이스 질문

0

34

2

코살 문제풀이 환경

0

46

2

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

0

41

1

추천 추가문제들

0

42

2

프로그래머스 코테 환경 관련해서 질문드립니다.

0

43

2

해당 문제에 대한 채점이 코딩살구클럽에서 올바르게 처리되지 않습니다.

0

40

2

균형 이진 트리 설명 시 높이 숫자

0

30

2

4-H 질문드립니다.

0

35

2

대기업 인적성 시험 질문

0

41

2

4-C 질문드립니다

0

41

2

[수학숙제 / BOJ 2870] 채점 서버 오작동

0

37

1

코테 준비 질문

0

50

1

살구클럽가입 요청드려요

0

38

2

1-I 문제 질문

0

39

2

코딩살구클럽 가입

0

57

2

AI 코딩 도구 사용 시 학습 방법 조언

0

51

2

코딩살구클럽 오류

0

61

2

코살클 [3-F 괄호 추가하기] 프라이빗 9번 제보

0

46

1

코딩살구클럽 테스트 케이스 오류 제보

0

52

2

삼성 코딩테스트

0

62

2

틀린 이유를 못찾겠습니다

0

48

2

시간은 이상 , 미만 질문 드립니다.

0

35

1