2019년 4월 15일 월요일

C언어 배우 (배열)

 오늘은 백준 배열 문제를 여러개 풀어봤다. 방학 때 들은 강의에서 배열에 대한 강의도 들었는데 그때도 제대로 이해 안됐었고 지금은 거의 가물가물해서 여러 문제 풀어봤다.
 여러개 풀어본 문제 중에 정답률이 제일 낮은 문제를 풀어봤다. 문제는 문자열을 입력받고 그 문자열의 단어의 개수를 구하는 문제다. 조건은 공백이 연속해서 나오는 경우는 없고 문자열의 앞과 뒤에 공백이 있을 수 있다는 조건이다.
 문자열의 길이가 1000000이 넘지 않는다는 조건에 따라서 1000001byte길이의 char 변수를 선언했다. 그리고 반복문에 사용할 i와 문자열에서 단어의 개수와 직접적으로 연관된 spacebar라는 변수를 선언했다. 왜냐하면 단어는 띄어쓰기 한 개로 구분된다는 조건이 있었기 때문이다. 
 먼저 gets로 처음에 선언한 문자열 a에 입력을 받는다. 그리고 변수 i를 a의 인덱스로 이용해서 문자열의 끝인 NULL이 나올때 까지 for문을 반복한다. 그리고 for문 안에는 if문으로 인덱스가 0이 아니고 문자열에서 공백이 나왔을 때 spacebar를 증가시킨다. 문자열의 인덱스가 0이 아닐 때를 포함시킨 이유는 문자열의 처음 공백이 단어 수로 들어가면 안 되기 때문이다. 그리고 문자열의 공백의 수만큼 spacebar를 다 증가시켰으면 만약 문자열의 끝에 공백이 있을 때를 생각해야 한다. 그래서 for문이 끝난 후에 if문을 열어서 만약 문자열의 끝인 NULL에서 한 인덱스 전에 들어있는게 공백이면 spacebar를 감소시키게 만들었다. 이 if문이 따로 바깥으로 빠져있는 이유는 for문이 다 끝날 때까지 a의 끝을 알 수 없기 때문이다. 그래서 for문이 다 끝난 후에 NULL의 인덱스를 구했다. 마지막으로 spacebar + 1을 출력해주면 문자열의 단어의 개수를 알 수 있다.

댓글 없음:

댓글 쓰기