밖이라 요약해서 말하면
문자열이 주어질때 그 문자열에 0개 이상 문자열을 더해서 가장짧은 회문을 출력하시오
ex. abb -> abba
ex. abcd -> abcdcba
ex. abcba -> abcba
아니 이거 어캐풀어요? 앞에 문자부터 더하면 될줄알았는데 2번같은 경우는 뒤부터 더해야되고...
문자열이 주어질때 그 문자열에 0개 이상 문자열을 더해서 가장짧은 회문을 출력하시오
ex. abb -> abba
ex. abcd -> abcdcba
ex. abcba -> abcba
아니 이거 어캐풀어요? 앞에 문자부터 더하면 될줄알았는데 2번같은 경우는 뒤부터 더해야되고...
이렇게 생각해보셈
일단 원래 문자열을 대칭시켜 뒤에 붙인다
근데 그 붙인 지점에 중복되는 원소가 있으면 하나만 냄겨도 되니까 그걸 다 지움
엥? 잘 이해가 안가는데 좀더 자세하게 설명되나요 코드나
ex. abb -> abba abb 를 푸려면 대칭행렬 bba를 만든다. char ori[] = {a,b,b} char tran[] = {b,b,a} 1) original 문자와 대칭된 문자가 맞는지 확인한다. 이 경우 3개의 글자 비교 가능 a b b b b a => ori[0]과 tran[0]이 안맞음, 탈락
2) 그 다음 대칭 문자를 한칸 밀어낸다 생각하고 비교. 이 경우 2개의 글자만 비교가능 a b b b b a => ori[1]과 tran[0]이 맞음 => ori[2]과 tran[1]이 맞음
총 비교 할수 있는 글자수인 2개가 맞으므로 답은 ori[]인 {a, b, b}에 tran[]의 여분으로 남는 {a}를 붙여서 펠린드롬을 만들어주면 된다.
ex. abcd -> abcdcba char ori[] = {a,b,c,d} char tran[] = {d,c,b,a} 1) original 문자와 대칭된 문자가 맞는지 확인한다. 이 경우 4개의 글자 비교 가능 a b c d d c b a => ori[0]과 tran[0]이 같지않음, 탈락
2) 그 다음 대칭 문자를 한칸 밀어낸다 생각하고 비교.이 경우 3개의 글자만 비교가능a b c d d c b a => ori[1]과 tran[0]이 같지않음, 탈락3) 그 다음 대칭 문자를 한칸 밀어낸다 생각하고 비교이 경우 2개의 글자만 비교가능a b c d d c b a => ori[2]와 tran[0]이 같지않음, 탈락
4) 그 다음 대칭 문자를 한칸 밀어낸다 생각하고 비교 이 경우 1개의 글자만 비교가능 a b c d d c b a => ori[3]과 tran[0]이 같음. 통과 => 1개의 글자비교로 통과를 했으므로 이걸 쓰면 된다. 결론, a b c d c b a란 글자를 만들수 있음
물론 이 방법은 시아닌님이 작성한 방법임
와 겁나 매운문제였네... 다들 거마워여