반응형
문제
https://www.acmicpc.net/problem/1032
1032번: 명령 프롬프트
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은
www.acmicpc.net
풀이
1. N개의 문자열들을 어떻게 관리해야할지.
2. 여러 문자열들을 비교해서 하나라도 곂친다면 해당 문자를 '?'로 어떻게 바꿔야할지
2-1. 같은 문자가 많더라도 하나라도 다르면 '?' 라는 것을 생각.
3. 컴파일 마다 문자열의 길이가 다르므로 어떻게 처리해야할지.
4. N = 1 일때 처리방법.
5. 문자열의 끝을 어떻게 확인할 것인가.
6. 문자열의 마지막은 NULL 문자이기 때문에 문자열 개수 + 1 를 해야할것.
소스코드
#include <stdio.h>
#include <string.h>
int main(void)
{
char array[51][51]; // 입력받을 배열
char curArray[51]; // 출력할 배열
int cnt_array = 0; // 입력받은 문자열의 개수
int length = 0; // 문자열의 길이
scanf("%d", &cnt_array);
for(int i = 0; i < cnt_array; i++)
{
scanf("%s", array[i]);
}
// 기준이 될 첫번째 문자열을 출력할 배열에 넣는다.
strcpy(curArray, array[0]);
// 문자열이 하나라면 비교할 필요가 없기 때문에 바로 출력 후 종료
if(cnt_array == 1)
{
printf("%s", curArray);
return 0;
}
// 문자열의 길이는 모두 똑같이 때문에 기준이 된 문자열의 길이를 잰다.
length = strlen(curArray);
// 문자열의 개수 만큼 반복한다.
for(int z = 1; z < cnt_array; z++)
{
// 문자열의 길이 만큼 반복한다.
for(int j = 0; j < length; j++)
{
// j번째 문자가 ? 가 아니고 기준 문자열과 다르다면 그 j번째 문자를 ?로 바꾼다.
if(curArray[j] != '?' && curArray[j] != array[z][j])
{
curArray[j] = '?';
}
}
}
printf("%s", curArray);
return 0;
}
반응형
'프로그래밍 > 백준(BOJ)' 카테고리의 다른 글
[백준(BOJ) / C][Silver Ⅳ] 9012번 : 괄호 (1) | 2024.01.03 |
---|---|
[백준(BOJ) / C][Silver Ⅴ] 25644번 : 최대 상승 (0) | 2024.01.03 |
[백준(BOJ) / C][Bronze Ⅱ] 1152번 : 단어의 개수 (1) | 2024.01.03 |
[백준(BOJ) / C][Silver Ⅳ] 1158번 : 요세푸스 문제 (1) | 2024.01.02 |
[백준(BOJ) / C][Silver Ⅴ] 7568번 : 덩치 (1) | 2024.01.01 |