백준 1032번 문제 - 명령 프롬프트


문제 링크 : https://www.acmicpc.net/problem/1032

명령 프롬프트 문제는 주어진 문자열들을 비교하여 불일치가 발생한 문자에 대해 ?로 표현하여 출력하는 문제이다.

하나의 문자열이라도 불일치가 발생한 경우 불일치가 발생한 위치의 문자는 ?로 출력되므로
비교할 기준이 되는 문자열 하나만을 저장하여 다른 문자열들과 비교하고 불일치가 발생한 위치의 문자를 ?로 변경한다면 공간적인 낭비를 줄일 수 있다.

또한 문자열의 길이 최대 값은 50이지만 그보다 작은 길이의 문자열 입력이 발생할 수 있다.

scanf 함수를 통해서 입력 받은 문자열의 마지막 문자는 NULL(‘\0’)이 입력되므로 (i<51 && arr[i] != NULL) 혹은 (i<51 && arr[i])의 조건문을 수행한다면 &&연산에 의하여 i<51을 만족하지 않는다면 뒤의 연산을 수행하지 않기 때문에 문자열 길이 내의 검사를 수행할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
using namespace std;
#define MAXSIZE 51
int N;
char arr[MAXSIZE], temp[MAXSIZE];

int main(){
scanf("%d",&N);
scanf("%s",&arr);
for(int i=1;i<N;i++){
scanf("%s",temp);
int j=0;
while(j<MAXSIZE && temp[j]){
if(arr[j]!=temp[j]) arr[j] = '?';
j++;
}
}
printf("%s\n",arr);
}