문자열 35

[백준 2675] 문자열 반복 [C]

풀이 반복횟수 R과 문자열 S를 입력받아 문자열의 각 문자가 R만큼 연속되는 새로운 문자열을 출력하면 된다. 문자열을 만들어서 출력하나, 문자를 하나씩 찍어서 출력하나 동일하다. 소스코드 #include int main(){ int T, R; char S[21]; scanf("%d", &T); while (T--){ scanf("%d %s", &R, S); for(int i = 0; i < S[i] != '\0'; i++) for(int j = 0; j < R; j++) putchar(S[i]); putchar(10); } } 출처 2675번: 문자열 반복 문자열 S를 입력받은 후에, 각 문자를 R번 반복해 새 문자열 P를 만든 후 출력하는 프로그램을 작성하시오. 즉, 첫 번째 문자를 R번 반복하고, 두..

[백준 2577] 숫자의 개수 [C]

풀이 A*B*C를 10으로 나누었을 때 나머지는 1의 자리만 남는다. 남는 수에 해당하는 배열의 index를 증가시키면 0~9의 숫자가 각각 몇 번 쓰였는지 알 수 있다. 1의 자리의 수를 알아낸 후 result를 10으로 나눈 결과에 10으로 나누었을 때의 나머지를 구하는 과정을 반복하면 된다. 소스코드 #include int main() { int A, B, C; scanf("%d %d %d", &A, &B, &C); int result = A*B*C, num[10] = { 0, };; while (result != 0){ num[result % 10]++; result /= 10; } for (int i = 0; i < 10; i++) printf("%d\n", num[i]); } 출처 2577번:..

[백준 9012] 괄호 [C]

풀이 입력되는 괄호가 쌍을 이루는지 묻는 문제이다. 괄호의 개수가 같아도 항상 쌍을 이루는 것이 아님을 유의하자. ex) : ( ) ) ) ( ( ( ) stack 구조에서 top변수를 통해 몇 개의 값을 가지고 있는지 알 수 있었다. 이번 문제에서도 top변수를 이용해 '('와 ')'의 구성비를 알아내 문제를 해결할 수 있다. '('일 때 top++, ')'일 때 top-- 를 하여 stack 구조를 이용한다. (top == 0 일 때 VPS이다.) '('가 ')'보다 적으면 VPS가 아니고 (top == -1), '('가 ')' 보다 많을 때도 VPS가 아니다.(top > 0) 따라서 , top가 0이 아니면 VPS가 아님을 알 수 있다. 소스코드 #include #include int main() ..

[백준 1157] 단어공부 [C]

풀이 입력받은 문자열을 모두 대문자 or 소문자로 바꾸고 아스키코드 값을 이용해서 구하는 방법과, 입력받은 문자열을 수정하지 않고, 아스키코드 값만을 이용하여 구하는 방법이 있다. 먼저 후자의 방법의 경우 idx = (str[i] - 'A') % 32; alphabet[idx]++; 처럼 만약 소문자 'b'(98)를 입력받으면 ( 'b'(98) - 'A'(65) ) % 32 = 1 이므로 alphabet[1]++; 이 된다. 하지만, 제출결과는 틀린것으로 나온다. 위 코드의 문제점이라면, str[i] - 'A' 값이 26~31 사이의 값이 나오는 경우이다. 이러한 값이 나오기 위해서는 알파벳 대/소문자가 아닌 다른 값이 입력되는 경우로, 제시된 입력 형식과 맞지않는다. 아니 이런 문제 오류는 언제고쳐? ..

[백준 1152] 단어의 개수 [C]

풀이 다른 언어에 비해 문자열에 관한 문제는 문제의 난이도에 비해 C로 풀이하기 힘든만큼 꼭 C를 고집할 필요는 없다. C언어로는 단어의 개수를 세는 방식이 아닌, 공백의 개수를 세고, 경우의 수를 따지는 방식이 더 효율적인 듯 하다. 엔터를 입력할 때 까지 계속 입력받는다. 공백 하나만 입력되는 경우도 고려해야한다. 마지막 단어 뒤에 공백이 있거나 없을 수 있어서 len - 1로 맨 끝의 공백이나, 단어의 맨 뒤를 고려하지 않는다. 소스코드 #include #include int main(){ char str[1000001]; gets(str); int cnt = 0, len = strlen(str); if (len == 1 && str[0] == ' '){ cnt = -1; }else for(int ..