ion485   3년 전

FAQ 읽고, 예제 넣어도보고,질문 게시판에서 반례들도 찾아서 넣어봤습니다..

혹시 다른 반례가 있나요? 문제가 뭔지 잘 모르겠습니다 ㅠㅠ

dps2   3년 전

안녕하세요

함수 안에 선언되어 있는 변수는 0으로 초기화되어있는 것이 보장되어있지 않습니다.

로컬 컴퓨터에서 작동시켜보면 0으로 초기화가 되어있는 경우가 많은데 이는 0이라는 숫자가 컴퓨터 공학에서 유용하게 쓰이기때문에

운영체제 수준에서 0이 차있는 메모리를 확보하려고 해서 로컬변수가 0으로 초기화되어있는 경우가 많습니다.

따라서 프로그램이 정확하게 작동하게 만들기 위해서는 초기화 작업이 필요합니다.

현재 코드상에서는 max변수가 초기화되어 있지 않습니다.

그리고 배열의 초기화는 ={0}; 이 아니라 ={0,}; 로 ,를 써주셔야 합니다.

2개 고치고 제출했더니 맞았습니다.

그 외에도 가동성을 조금 높이시면 좋을 것 같습니다.

아스키코드를 숫자로 표현하시기 보아 작은따옴표로 'a' 'A'이런식으로 쓰면 자동으로 해당하는 아스키코드로 변환이 됩니다.

표준헤더파일 중 하나인 ctype.h에 문자를 다루는 함수들이 여러 있습니다.

그 중 하나인 tolower함수는 대문자가 들어오면 소문자로 바꿔주고 그 외에 글자들은 그대로 return합니다.

따라서 아래 첨부한 코드 1번처럼 바꿀 수 있을 것입니다.


그리고 strlen으로 길이를 확인하셔도 되지만 strlen은 시간이 걸리는 함수입니다. 시간복잡도로 나타내면 O(n)입니다.

사실 어차피 문자열을 다 볼 것이기 때문에 실행시간이 크게 차이나는 편은 아니지만

2번처럼 쓰면 더 효율적으로 짤 수 있습니다. (널문자는 0이여서 false취급됩니다.)

마지막으로 main에서 return 0;을 안하셨는데 꼭 해주시는 것을 추천드립니다.

나중에 백준 문제들 중 일부는 return 0을 안하면 런타임 에로가 뜰 수도 있습니다.

3번은 마지막 코드를 다듬은 것입니다.

ion485   3년 전

감사합니다 ㅠㅠ max 변수 초기화하니까 바로 되네요.

코딩을 거의 2년동안 안했더니 변수 초기화하는 법도 까먹어서 이 사태가 벌어진것같습니다 ㅠㅠ

(int max, idx, b, ... n = 0 이렇게 하면 전부 초기화되는줄 알았어요..)

그 외에도 지적해주신거 감사드립니다. 앞으로 공부할때 더 유의하겠습니다.

정말감사합니다!

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