kwak716   2년 전

max 와 result 는 각각 배열의 원소 중 가장 큰 값 , 그 값은 인덱스 번호를 저장해두었습니다.

하지만 컴파일 시 결과 값은 초기에 선언한 0값들이 출력이 되는데요..

해당 코드에서 어떤 부분을 수정해야 정상적으로 값이 출력이 될까요..?

nahwasa   2년 전

최대한 건드리지 않으면서 로직에 맞게 수정했습니다.

왜 num[i] != '\0' 같은 에러 확률 높고 읽기도 힘들고 나중에 찾기도 어려운 코드를 쓰셨는지 잘 모르겠네요!

저걸 바꿔주고, cnt != 0 부분 수정해줬습니다.

kwak716   2년 전

제가 강의 보다는 c언어 책으로 독학을 하다 백준을 풀고 있는데.. 이전 책에서는 NULL을 대입하는 방식으로 코드를 작성하더라구요.

num[i] != NULL과 같은 표현이 에러가 날 확률이 왜 높을지 혹시 알 수 있을까요??

작성한 코드에 맞게 수정하여주셔서 정말 감사드립니다!

혹시 작성한 코드는 꽤나 간결하게 작성한 편인걸까요..?

kwak716   2년 전

추가적으로.. max , result의 값이 올바르게 출력되지 않은 이유는

반복문에서 조건문이 잘못됐긴 때문인가요...? 위에 같은 질문을 드리기는 했지만,

제가쓴 조건문이 해당 출력에 어떤 영향을 미친 건가요..?

마지막으로 != NULL 과 같은 표현이 작성자님이 작성해주신 9줄의 반복문 조건에서 str[i] != NULL 의 사용은 불가피한가요?? 아니면 다른 표현 방법이 있을까요?? 

있다면 strlen(str)을 활용하면 되나요?

djm03178   2년 전

널 문자는 문자열의 끝을 표시하는 문자입니다. 문자열의 마지막 글자 뒤에는 항상 널 문자를 넣기로 약속이 되어있기 때문에 문자열에 대해서는 널 문자로 검사하면 되는 것 뿐이지, 문자열이 아닌 것에 대해서는 널 문자로 끝을 검사할 수도 없고 검사해서도 안 됩니다.

djm03178   2년 전

널 문자의 값은 0이기 때문에 cnt 배열 내에서 처음으로 0이 나타나는 인덱스가 있다면 거기서 루프가 종료되므로, 그보다 뒤쪽 인덱스에 정답이 있었다면 정답을 찾지 못하게 되는 것입니다.

게다가 만일 cnt 배열의 모든 원소가 0이 아니라면 i는 cnt의 크기를 넘어서 계속 증가하게 되고 cnt의 범위를 벗어난 인덱스에 접근하는 문제까지 발생합니다.

nahwasa   2년 전

1. num[i] != NULL과 같은 표현이 에러가 날 확률이 왜 높을지 혹시 알 수 있을까요??

-> 위에 고수분이 말씀해주신 것과 동일합니다. 글자 마지막이 NULL 문자이지, 배열의 마지막에 NULL인건 아니거든요. 그런데 문자가 아닌 곳에서도 NULL로 체크를 하셨구요. 그래서 어제 글 쓸 때는 로직이 틀렸다고 판단하기 보다는, 뭔가 생각한 바가 있는데(전 모르겠지만) 잘 안됬다고 판단해서 '에러 확률 높고 읽기도 힘들고 나중에 찾기도 어려운 코드를 쓰셨' 이라고 말했습니다. 문자열 판단에만 쓴다면 제가 말한건 틀린 말 입니다.

2. 혹시 작성한 코드는 꽤나 간결하게 작성한 편인걸까요..?

-> 이건 사람마다 취향도 다르고 짜는 스타일도 달라서 뭐라 말은 못하겠지만, 최대한 작성자분 코드를 그대로 두는 상태에서 쓸모없는 로직만 걸러낸 코드를 아래쪽에 추가해두겠습니다. 전 JAVA를 주로 하는 사람이라서 더 고수분들은 더 줄일 수 있을지도 모르겠네요. 그리고 이건 뭐 습관에 관련된건데, 'A'를 그냥 65 라고 하드코딩해서 쓰셨잖아요? 이런건 특별한 이유가 있는게 아니라면 지양해주시는게 좋긴합니다. 나중에 디버깅 하기 빡쌔져요.

3. 제가쓴 조건문이 해당 출력에 어떤 영향을 미친 건가요..?

-> 네넹 위에 고수분이 상세히 적어주셧네요!

4. 9줄의 반복문 조건에서 str[i] != NULL 의 사용은 불가피한가요??

-> 말씀 하신 strlen을 쓰시면 됩니다. 결국 걔도 NULL(\0) 까지 확인하고 길이 알려주는겁니다.

kwak716   2년 전

두분 모두.. 정말 감사드립니다.. ㅠㅠ 이해가 확실히 되었네요

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