⚠️ 내맘대로 작성한 코드이기 때문에 비합리적 진행과 근거없는 추론이 있을 수 있습니다 ⚠️
문제 링크 : https://www.acmicpc.net/problem/20291
Code
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// qsort를 위한 compare함수
int compare(const void *a, const void *b)
{
return strcmp((char *)a, (char *)b);
}
int main() {
char result[50000][101]; // 확장자 기록 배열
int outputN[50000] = { 0, }; // 각 확장자별 갯수 기록 배열
int num = 0; // 입력값
char string[101]; // 파일명 입력 배열
char *ptr; // 확장자 분리용
int cnt = 0; // 확장자의 갯수 카운트
scanf("%d", &num);
// 배열 입력 및 확장자 분리
for (int i = 0; i < num; i++){
scanf("%s", string);
ptr = strtok(string, ".");
ptr = strtok(NULL, ".");
strcpy(result[i], ptr);
}
// 확장자를 사전 순서로 정렬
qsort(result, num, sizeof(result[0]), compare);
// 배열속 확장자의 갯수 카운트 및 결과 출력
for(int i = 0; i < num; i++){
if(strcmp(result[i],result[i+1]) == 0){
outputN[cnt]++;
}
else if(strcmp(result[i],result[i+1]) != 0){
printf("%s %d\n", result[i], outputN[cnt] + 1);
cnt++;
}
}
return 0;
}
Code 필수 요소
1. "."을 기준으로 확장자를 분리할 strtok의 사용및 사용법
2. 확장자를 사전순으로 정렬하기 위한 sort의 사용및 사용법
이것만 생각해내면 절반은 끝났다.
// 배열 입력 및 확장자 분리
파일의 이름을 입력받고, strtok를 이용해서 "." 이후의 확장자만 분리하여 2차원 배열에 바로 넣어준다.
// 확장자를 알파벳 순서로 정렬
퀵정렬을 이용해서 입력받은 모든 확장자를 사전순서로 정렬해준다.
// 배열속 확장자의 갯수 카운트 및 결과 출력
연속된 확장자를 비교하여 같을경우 해당 확장자의 갯수에 해당하는 배열의 값을 늘려준다.
앞의 확장자와 뒤의 확장자가 다를 경우 해당 확장자의 총 갯수가 끝났다고 판단, 해당 확장자와 그 갯수를 출력한다.
끝나고 보니까 확장자의 갯수에 해당하는 값을 배열이 아니라 int변수 하나만 쓰고 초기화하면서 쓰는게 나았을거같다.
-끝-