출처 : https://www.acmicpc.net/problem/1032
소스 코드
import java.util.*;
class Main {
public String solution(String[] arr, int n) {
String answer = "";
if (n == 1) return arr[0];
else {
int strLen = arr[0].length();
for(int i=0; i<strLen; i++) {
int cnt = 0;
for(int j=0; j<n-1; j++) {
if (arr[j].charAt(i) == arr[j+1].charAt(i)) {
cnt++;
}
if (j == n-2) {
if (j == n - 2 && cnt == n-1) answer += String.valueOf(arr[j].charAt(i));
else answer += "?";
}
}
}
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] arr = new String[n];
for(int i=0; i<n; i++) {
arr[i] = sc.next();
}
System.out.println(T.solution(arr, n));
}
}
그런데 생각해보니 이렇게 작성할 것이 아니라 첫번째로 입력받는 문자열을 기준삼아
다른 arr의 글자랑 다른 것이 있는지 찾아 다른 것이 있다면 ?로 바꾸는 것이 코드가 줄어들겠군..
import java.util.*;
class Main {
public String solution(String[] arr, int n) {
String answer = "";
char[] basis = arr[0].toCharArray();
if (n == 1) return arr[0];
else {
int strLen = arr[0].length();
for(int i=0; i<strLen; i++) {
for(int j=0; j<n-1; j++) {
if (arr[j].charAt(i) != arr[j+1].charAt(i)) basis[i] = '?';
}
}
answer = new String(basis); // or String.valueOf(basis)
}
return answer;
}
public static void main(String[] args) {
Main T = new Main();
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
String[] arr = new String[n];
for(int i=0; i<n; i++) {
arr[i] = sc.next();
}
System.out.println(T.solution(arr, n));
}
}
'Java 코딩테스트 공부 > Java 백준 문제풀이' 카테고리의 다른 글
자바 백준 1644번 문제 - 소수의 연속합 (0) | 2022.08.11 |
---|---|
자바 백준 1806번 문제 - 부분합 (0) | 2022.08.02 |
Java 백준 1747번 문제 - 소수&팰린드롬 (0) | 2022.08.01 |
백준 10808번 알파벳 개수 / 자바 문자열 파트 (0) | 2022.07.12 |
백준 String(문자열) 문제풀이 (0) | 2022.06.01 |