https://www.acmicpc.net/problem/1032
[문제]

[해설]
1. 문제 이해
Windows의 **cmd 명령어 dir**을 사용하면 특정 패턴의 파일을 검색할 수 있다.
예를 들어
라고 입력하면
- 첫 글자: a
- 세 번째 글자: b
- 두 번째 글자: 아무 문자 (?)
- 확장자: .exe
조건에 맞는 파일들이 검색된다.
예시 결과
문제에서는 검색 결과로 나온 파일 이름들이 먼저 주어지고,
이 파일들이 모두 검색될 수 있도록 하는 패턴을 만들어야 한다.
패턴에는 다음 문자만 사용할 수 있다.
- 알파벳
- .
- ? (아무 문자 가능)
또한 가능하면 ?를 적게 사용해야 한다.
그리고 모든 파일 이름은 길이가 동일하다.
2. 핵심 아이디어
모든 파일 이름의 같은 위치의 문자들을 비교하면 된다.
예를 들어 파일이 다음과 같다고 가정하자.
각 인덱스를 비교하면
| 위치 | 문자 | 결과 |
| 0 | c c c | c |
| 1 | o o o | o |
| 2 | n n n | n |
| 3 | f f f | f |
| 4 | i i i | i |
| 5 | g g g | g |
| 6 | . . u | ? |
같은 위치의 문자가 모두 같으면 그대로 사용
하나라도 다르면 ? 사용
즉 알고리즘은 다음과 같다.
- 파일 이름들을 배열에 저장한다.
- 첫 번째 파일을 기준으로 각 문자 위치를 확인한다.
- 다른 파일들의 같은 위치 문자와 비교한다.
- 모두 같으면 해당 문자 출력
- 하나라도 다르면 ? 출력
[코드]
public static void main(String[] args) {
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();
}
StringBuilder sb = new StringBuilder(); // 패턴을 저장할 StringBuilder 객체 생성하기
for (int idx = 0; idx < arr[0].length(); idx++) {
boolean isSame = true;
char c = arr[0].charAt(idx); // 첫 번째 파일의 idx번째 글자 저장하기
// arr 배열에 있는 데이터들의 idx번째 글자가 동일한지 확인하기
for (int j = 1; j < N; j++) {
if (c != arr[j].charAt(idx)) isSame = false; //파일의 단어가 다르면 false로 바꿔주기
}
if (isSame) {
sb.append(c); //모든 파일의 단어가 같으면 그 단어 출력
} else {
sb.append("?"); //다르면 ? 출력
}
}
System.out.print(sb);
sc.close();
}'알고리즘 > 문제' 카테고리의 다른 글
| [백준] 2566번 문제 - JAVA (0) | 2026.03.09 |
|---|---|
| [백준] 10810번 문제 - JAVA (0) | 2026.03.09 |
| [백준] 25494번 문제 - JAVA (0) | 2026.03.08 |
| [백준] 1037번 문제 - JAVA (0) | 2026.03.05 |
| [백준] 1009번 문제 - JAVA (0) | 2026.03.05 |