출처 : https://www.acmicpc.net/problem/1032
1032번: 명령 프롬프트
첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은
www.acmicpc.net
소스 코드
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 |