반응형
코드포스 4C Registration system 풀이 코드 | C (C언어)
문제 해설
문자열들을 순서대로 기록하며 새로운 문자열일 땐 'OK'를, 중복된 문자열일 땐 문자열 끝에 오름차순으로 숫자를 붙여 출력하는 문제입니다.
풀이
동적할당으로 배열을 선언하고 문자열을 입력받을 때마다 기존 배열과 비교하여 새 문자열이 중복인지 아닌지 판단합니다. 각 문자열의 중복이 몇 번 있었는지 표시할 int 배열도 선언하여 비교에 사용합니다. 중복되지 않았다면 배열에 해당 문자열을 추가함과 동시에 'OK'를 출력하고, 중복이라면 문자열을 배열에 추가하지는 않고 중복 횟수는 1회 늘린 후 해당 문자열과 숫자를 출력합니다.
코드
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int printString(int l, int n, char** names, int* number, char* buffer){
int i;
if (l > 0){
char* newstrptr = (char*)malloc(sizeof(char) * (l + 1));
strcpy(newstrptr, buffer);
for(i = 0; i <= n; i++){
if(!strcmp(names[i], newstrptr)){
number[i]++;
printf("%s%d\n", names[i], number[i]);
return n;
}
}
strcpy(newstrptr, buffer);
names[n] = newstrptr;
printf("OK\n");
n++;
}
return n;
}
int main(){
int maxLength = 10000, i, times;
char* names[maxLength];
for(i = 0; i < 10000; i++){
names[i] = (char*)malloc(sizeof(char) * 33);
}
int number[10000] = {0, };
char buffer[33];
int n = 0;
int l = 0;
scanf("%d", ×);
for(i = 0; i < times; i++){
scanf("%s", buffer);
l = strlen(buffer);
n = printString(l, n, names, number, buffer);
}
return 0;
}
문제 출처
반응형
'Coding > CODEFORCES' 카테고리의 다른 글
[코드포스 CODEFORCES] 231A Team 풀이 코드 (C) (0) | 2021.06.19 |
---|---|
[코드포스 CODEFORCES] 4C Registration system 풀이 코드 (Java) (0) | 2021.06.02 |
[코드포스 CODEFORCES] 4B Before an Exam 풀이 코드 (C++) (0) | 2021.05.31 |
[코드포스 CODEFORCES] 4B Before an Exam 풀이 코드 (Python) (0) | 2021.05.30 |
[코드포스 CODEFORCES] 4B Before an Exam 풀이 코드 (Java) (0) | 2021.05.29 |