https://www.acmicpc.net/problem/1032
문자열 처리에 관한 문제입니다.
문제가 복잡해보이지만, 한마디로 정리하면 이렇습니다.
"한 열씩 비교하여 셋 다 같으면 공통된 문자를 그대로 출력하고, 그 중 하나라도 다르면 ?를 출력해라"
문제에는 제시되지 않은 반례를 먼저 알려드리겠습니다.
[입력]
3
abc
bbc
aba
[출력]
?b?
이렇게 앞부분에 서로 다른 문자가 나올 수도 있습니다.
저도 처음에 이 부분을 놓쳐서 코드를 다시 설계했습니다.
이제 답을 보시죠.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
boolean chk[]; // 몇 번째 열이 서로 다른 문자인지 체크하기 위한 배열(false==다같음, true==서로 다름)
Scanner sc = new Scanner(System.in);
String[] str = new String[51];
int n = sc.nextInt(); // 문자열을 몇 줄 입력받을 것인가?
sc.nextLine();
for (int i = 0; i < n; i++) {
str[i] = sc.nextLine();
}
chk = new boolean[str[0].length()];
Arrays.fill(chk, false); // chk[]의 기본값은 false
if (n == 1) {
System.out.println(str[0]); // 1줄인 경우에는 비교할 것도 없이 바로 출력
} else {
for (int i = 0; i < str[0].length(); i++) { // 한 글자씩 비교하겠다
for (int j = 1; j < n; j++) { // 첫번째 줄을 기준으로, 나머지 줄을 비교
if(!(str[0].substring(i,i+1).equals(str[j].substring(i,i+1))))
{ // 첫번째 줄의 i번째 글자와 j번째 줄의 i번째 글자가 다른지 비교
chk[i]=true; // 글자가 서로 다르면 i번째는 true
break; // i번째 글자는 이미 다른게 판명 났으므로 더 비교할 필요 X
}
}
}
for(int i=0; i<str[0].length(); i++) {
if(chk[i]==false) { // false면(i번째 글자가 같으면)
System.out.print(str[0].substring(i,i+1));
}
else { // true면(i번째 글자가 서로 다르면)
System.out.print("?");
}
}
}
}
}
[백준](2338번) 긴자리 계산 (0) | 2020.08.30 |
---|---|
[백준](1000번) A+B (0) | 2020.08.30 |
[백준](1252번) 이진수 덧셈 (0) | 2020.08.30 |
[백준](1038번) 감소하는 수 : 골드 문제 첫 도전 (0) | 2020.08.30 |
[백준] 100문제 풀이 후기 (0) | 2020.08.30 |