1181
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int cmp(const void *a, const void *b) {
char *str1 = (char *)a;
char *str2 = (char *)b;
int len1 = strlen(str1);
int len2 = strlen(str2);
if (len1 != len2) {
return len1 - len2; // 길이 짧은 게 먼저
}
return strcmp(str1, str2); // 길이가 같으면 사전순
}
int main(void) {
int num;
scanf("%d", &num);
// 입력 받기
char str_arr[20000][51];
for (int i = 0; i < num; i++) {
scanf("%s", str_arr[i]);
}
// 퀵 정렬
qsort(str_arr, num, sizeof(str_arr[0]), cmp);
// 출력
printf("%s\n", str_arr[0]);
for (int i = 1; i < num; i++) {
if (strcmp(str_arr[i-1], str_arr[i]) != 0) {
printf("%s\n", str_arr[i]);
}
}
return 0;
}

에휴
버퍼 지랄나고(는 내가 해결함) 시간초과 뜨고 난리 나서 결국 지피티와 인터넷 도움으로 품
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void swap (char (*str_arr)[51], int i, int j){
char temp_str[51];
strcpy(temp_str, str_arr[j]);
strcpy(str_arr[j], str_arr[i]);
strcpy(str_arr[i], temp_str);
}
int main(void){
int num;
scanf("%d", &num);
char str_arr [20000][51] = {0};
for(int i = 0; i < num; i++){
scanf("%s", str_arr[i]);
for(int j = 0; j < i; j++){
if(strlen(str_arr[j]) > strlen(str_arr[i])){
swap(str_arr,i,j);
}
if(strlen(str_arr[j]) == strlen(str_arr[i])){
if (strcmp(str_arr[j], str_arr[i]) > 0) {
swap(str_arr, i, j);
}
}
}
}
printf("%s\n", str_arr[0]);
for (int i = 1; i < num; i++) {
if (strcmp(str_arr[i-1], str_arr[i]) != 0) {
printf("%s\n", str_arr[i]);
}
}
return 0;
}
원래 이 코드로 풀었는데 vsCode에선 잘 출력되는데 백준에서는 자꾸 시간초과 나는 거;;
알고 보니 내가 정렬하는 부분에서 O(n^2)이 돼서 너무 오래 걸려서 시간초과가 나는거였삼
quick정렬로 바꿔서 하니까 걍 바로 됨. ㅇ 짜증남 ㅇ
아 string.h랑 stdilb.h 좀 공부해야겠삼.. ㅜㅜ
에휴에효
'백준' 카테고리의 다른 글
| [ 백준 / C ] 10807번 : 개수 세기 (0) | 2025.09.17 |
|---|---|
| [ 백준 / C ] 4758번 : Filling Out the Team (0) | 2025.09.16 |
| [ 백준 / C ] 1568번 : 새 (0) | 2025.09.12 |
| [ 백준 / C ] 1094번 : 막대기 (0) | 2025.09.11 |
| [ 백준 / C ] 5618번 : 공약수 (0) | 2025.09.10 |