30. 적합한 기본 함수를 사용하자
문자열의 길이는 최대 20
문자열의 개수는 3
char stringArr[3][21]; //include null terminated
입력 받은 문자열 input[21]을 2번째 행에 복사
for(int i=0; i<21; i++) {
stringArr[1][i] = input[i];
}
31. 적합한 기본 함수를 사용하자
strcpy(stringArr[1], input);
기본 함수로 바꾸기 가능~!
printf, scanf, gets, atoi, strcpy, strncpy, memset, strlen, strcat, strcmp, strstr, ...
다음 함수 정도는 기본적으로 사용하자
33. 적합한 함수보다는 적합한 구문을 사용하자
입력 받은 대문자를 소문자로 바꾸는 프로그램
문자열 길이는 최대 20
for (int i=0; i<strlen(input); i++) {
printf(“%c”,input[i]+32);
}
for (int i=0; input[i]!=’0’; i++) {
printf(“%c”,input[i]+32);
}
46. 요약
인간의 뇌의 한계를 인정하고,
그 상황에서 최적의 방법을 모색한다.
실수할 확률을 하나씩 줄여나가고,
혼란의 도가니를 벗어나보자.
Editor's Notes
: 코드작성은 번역일뿐.
그 전에 코드를 작성하는 건 완성된 글이 아닌 것을 번역하는 것.
결과가 나오는 것이 이상하다.
풀다보면 나오겠지 == 안풀리면 말고
용도를 알 수 없다
이게 어떤 의미인지는 다들 아시겠죠?^_^
다시 이 변수가 무엇인지 확인하고 싶지 않다면
팩토리얼을 구한다면 팩토리얼을 구하는 이유.
뭐든지 적당히^_^
로직이 들어가는 곳 근처에 변수선언을 하는 것은 종스크롤 시간을 줄여준다.
개발 시간 중 키보드를 치는 시간은 은근히 별로 없다.
애매한 코드에서의 디버깅을 하는 것은 차라리 문제를 다시 손으로 푸는 것이 낫다
디버깅의 남용은 문제풀이의 속디버깅의 남용은 문제풀이의 속도저하와 뇌의 혼란을 유발하지만, 디버깅이 없는 개발은 생각하기 싫은 것은 확실하다
디버깅의 남용은 문제풀이의 속도저하와 뇌의 혼란을 유발하지만,
디버깅이 없는 개발은 생각하기 싫은 것은 확실하다.
다음 정도는 반드시 익숙해지자!
초기화 단계를 명시하지 않으면 꼭 한번씩 빼먹게 되어있다. 나약한 닝겐 ㅋ....
덧, proc과 output이 합쳐져 있는 경우도 있다.
위와 같은 이유에서 다음의 상황을 생각해보자. exit가 0이 아니면 cnt증가시키는 구문이다.
if (exit != 0) cnt++;
여기에 exit가 0이 아니면 exit를 0으로 만들고 cnt를 증가시킨다고 변경시켜보자.
if (exit != 0)
exit = 0;
cnt++;
저딴 실수를 하는 건 호구 아니냐고 생각할지 모르겠지만, 한 번이라도 이런 실수를 해본 적이 있다면 다시는 이러지 말자.
애초에 이렇게 했다면 실수할 확률이 없다.
if (exit != 0) {
cnt++;
}
명확하지 않은 단항 증감연산자는 실수를 유발한다. 적어도 나는 실수한다.
마찬가지로, 이렇게 나눠쓰자.
우리는 짧은 코드 대회에 나가는 것이 아님을 기억하자.
덧, i = ++i + i++ + ++i; 이것의 결과는 뭔가? 이것은 표준에 명시되지 않은 문법이다.
절대 한 행에 섞어 쓰면 안된다. 즉, 결과는 컴파일러마다 다르다.
명확하지 않은 단항 증감연산자는 실수를 유발한다. 적어도 나는 실수한다.
마찬가지로, 이렇게 나눠쓰자.
우리는 짧은 코드 대회에 나가는 것이 아님을 기억하자.
덧, i = ++i + i++ + ++i; 이것의 결과는 뭔가? 이것은 표준에 명시되지 않은 문법이다.
절대 한 행에 섞어 쓰면 안된다. 즉, 결과는 컴파일러마다 다르다.
문자열의 배열을 생각해보자.
문자열의 길이는 최대 20이고, 문자열의 개수는 3개이다.
그러면 선언은 다음과 같다.
다음의 함수 정도는 기본적으로 사용하자.
(멤버십의 추세는 math.h와 qsort()를 사용하지 않는 것이라는 것만 참고하자)
특히나 문자열관련 함수는 모르면 캐불리.
printf, scanf, gets, atoi, strcpy, strncpy, memset, strlen, strcat, strcmp, strstr, ...
이렇게 하면 어떤가? strlen()을 호출하는 것은 느리다.
함수 호출을 안할 수 있으면 안하는게 좋다.
(memset을 호출하지 않는 쪽으로 최적화됨)
(memset을 호출하지 않는 쪽으로 최적화됨)
100,000^2 같은 선언이 아닌 이상에야,
1,000정도의 범위에서는 마구 선언해도 좋다.
bound 초과를 피하기 위해 +1~2 정도 선언하는 것을 추천한다
근데, 여기서 ‘+’의 아스키 코드는 43이다. 즉, 숫자에 43이 들어온다면 예측할 수 없는 결과를 낸다.
이 경우, ‘+’를 -43 등으로 지정해주는 꼼수(숫자는 양의 정수랬으니까)를 쓰거나,
operator와 operand의 배열을 따로 두는 방법을 사용해야 한다.
문제를 풀다 보면 혼란 속에서 헤매다가 대부분의 시간이 가는 경우가 많다.
바람을 쐬고 음료수를 마시고, 잠깐의 휴식은 뇌의 활용에 도움이 가지 않는가 ._?
소탐대실을 기억하자.
인간의 뇌의 한계를 인정하고, 그 상황에서 최적의 방법을 모색한다.
실수할 확률을 하나씩 줄여나가고, 혼란의 도가니를 벗어나보자.