본문 바로가기

전체 글

(128)
[C언어] 백준 1316 그룹 단어 체커 #include int main(void) { int n, cnt = 0, i, grouped; int lastIndex[26] = { 0 }; char c; scanf("%d%*c", &n); while(n--) { i = 1, grouped = 1; // while loop: until '\n' entered, get characters one by one for one word while ((c = getchar()) != '\n') { if (grouped) { // if the value at an index corresponding to alphabetical order is 2 (or more) less than i if (lastIndex[c - 'a'] && i - lastIndex[c ..
[C언어] 백준 2941 크로아티아 알파벳 #include int main(void) { char word[100+1]; int i, cnt = 0; scanf("%s", word); for (i = 0; word[i] != '\0'; i++, cnt++) { switch (word[i]) { case '=': case '-': cnt--; break; case 'd': if (word[i+1] == 'z' && word[i+2] == '=') cnt--; break; case 'l': case 'n': if (word[i + 1] == 'j') cnt--; } } printf("%d", cnt); return 0; } switch문 사용 word[i]의 값이 몇 가지 경우 안에서 상수로 정해져 있기 때문에 switch문을 써서 코드를 단순화 i..
[C언어] 백준 5622 다이얼 #include int main(void) { int dif, sec = 0; char c; while ((c = getchar()) != '\n') { dif = c - 'A'; if(dif < 'S'-'A') sec += (dif / 3) + 3; else if(dif < 'Z'-'A') // from S sec += ((dif - 1) / 3) + 3; else sec += ((dif - 2) / 3) + 3; } printf("%d", sec); return 0; } switch문을 사용해서 풀 수도 있었겠지만, A-Z까지 26개의 라인을 소비하고 싶지 않았다. S 혹은 Z 이전까지는 하나의 다이얼에 3개의 알파벳이 들어가기 때문에 정수의 나눗셈과 조건을 적당히 활용해 풀었다 문자열로 입력받아 다..
[C언어] 백준 2908 상수 #include #include #define DIGIT 3 void reverse(char* n1); int main(void) { char num1[DIGIT + 1]; char num2[DIGIT + 1]; scanf("%s %s", num1, num2); reverse(num1); reverse(num2); printf("%s", strcmp(num1, num2) > 0 ? num1 : num2); printf("%s", atoi(num1) > atoi(num2) ? num1 : num2); //string.h대신 stdlib.h필요 return 0; } void reverse(char* n1) { char tmp; tmp = *n1; *n1 = *(n1 + 2); *(n1 + 2) = tmp; ..
[C언어] 백준 1152 단어의 개수 #include #include int main(void) { char str[1000000 + 1]; int cnt = 0, i, len; gets(str); len = strlen(str); for (i = 0; i
[C언어] 백준 1157 단어공부 풀이1: c-string을 한번에 받아 처리하기 (복잡) #include #include #define LETTERS 26 int main(void) { char word[1000000] = { '\0' }; int alpha[LETTERS] = { 0 }; int i, most, second; gets(word); for (i=0; word[i] != '\0'; i++) word[i] = toupper(word[i]); for(i=0; word[i]!='\0'; i++) alpha[word[i] -'A']++; second = -1; for (i = most = 0; i alpha[most]) most = i; else if (i && alph..
[C언어] 백준 2675 문자열반복 아래는 거의 같은 코드인데, 1. 요소에 직접 접근 word[i]하는 방식과 2. 포인터 카피변수를 만들고, 주소를 변경해 접근하는 방식을 다루고 있다. (배열과 포인터 연습 중..) #include int main(void) { int n, r, i, j; char word[20 + 1]; scanf("%d", &n); while(n--) { scanf("%d %s", &r, word); for (i=0; word[i] != '\0'; i++) for(j=0; j
[C언어] 백준 10809 알파벳찾기 #include int main(void) { int i; char word[100+1]; char alpha[26] = {'\0'}; scanf("%s", word); alpha[word[0] - 'a'] = -2; for (i = 1; word[i] != '\0'; i++) { if (!alpha[word[i] - 'a']) alpha[word[i] - 'a'] = i; } for (i = 0; i < 26; i++) printf("%d ", alpha[i] == 0 ? -1 : alpha[i] == -2 ? 0 : alpha[i]); return 0; } 풀이방식1 첫 번째 occurrence 를 찾은 후 그 인덱스를 alpha에 저장하는 for loop alpha를 돌면서 해당 알파벳이 word에..