cardbt   7년 전

안녕하세요~!


로직은 매우 간단하게 작성하였습니다.

문자열에서 현재 문자 != 이전 문자 일경우, 알파벳 배열의 수량을 증가시키고, 알파벳의 수량이 2개가 되면 판독 진행을 멈추게 하였습니다.

판독이 끝까지 이뤄지면 그룹이라고 처리하여 결과를 도출하는 방식입니다.


틀린만한 부분이 도무지 보이지 않는데 틀렸습니다가 나오네요.

제 3자의 눈이 필요한 시점입니다 ㅠㅠ

한번 봐주십시요.


감사합니다.

occidere   7년 전

문제가 발생한 부분은 9번 라인의 memset부분입니다.

memset 함수의 인자는 순서대로 memset(메모리 주소, 값, 범위) 입니다.

그런데 8번라인의 char 배열 memset은 char형 1개당 크기가 1바이트이므로 101로 범위를 잡아줘도 되지만,
9번라인의 int배열 memset은 int형 1개당 크기가 4바이트이므로 26이 아닌 26*4로 초기화해주셔야 합니다.
(실제로 해당 int배열 값을 반복문을 통해 확인해보면 0으로 제대로 초기화가 되지 않고있습니다.)

따라서 9번부분을 memset(alpha, 0, 26*sizeof(int));와 같이 수정해주셔야 합니다..

이것만 고치고 제출하니 AC 뜨네요

p.s. 반복문 내에서 strlen(str)함수를 사용하셨는데 이는 반복문이 1번 돌을 때 마다 스트링의 길이를 매번 체크하기때문에 시간이 훨씬 늘어납니다.
다른 변수에 따로 strlen(str)값을 저장하신 다음 사용하시는게 좋습니다.

cardbt   7년 전

Aㅏ...

허허허허허 이것참

역시 제 3자의 눈이 필요하군요. 다른 문제 풀때는 int array 초기화 할 때 사이즈 잘 처리했었는데, 이건 왜 저게 안보였을까요 ㅎㅎ


p.s 내용 지적도 감사합니다. 보통은 저렇게 안쓰는데 50개짜리 짧은거라 그냥 뒀습니다 ㅎㅎ

의견 감사합니다.

robin0108   6년 전

님의 알고리즘으로는 
aabbaa가 통과되지 않을것 같은데..어떻게 통과하셨나요?

aabbaa에서
ab 이 부근에서 a에 해당하는 것이 ++되고, ba부분에서 b 가 ++되고 끝인거 같습니다.
이렇게 되면 1을 넘지 않으므로 통과되지 않아야 합지 않나요?

댓글을 작성하려면 로그인해야 합니다.