알고리즘/문제

[백준] 1032번 문제 - JAVA

Retro Rat 2026. 3. 5. 20:59

https://www.acmicpc.net/problem/1032

[문제]


[해설]

1. 문제 이해

Windows의 **cmd 명령어 dir**을 사용하면 특정 패턴의 파일을 검색할 수 있다.

예를 들어

더보기
더보기

dir a?b.exe

라고 입력하면

  • 첫 글자: a
  • 세 번째 글자: b
  • 두 번째 글자: 아무 문자 (?)
  • 확장자: .exe

조건에 맞는 파일들이 검색된다.

예시 결과

더보기
더보기

acb.exe
aab.exe
apb.exe

문제에서는 검색 결과로 나온 파일 이름들이 먼저 주어지고,
이 파일들이 모두 검색될 수 있도록 하는 패턴을 만들어야 한다.

패턴에는 다음 문자만 사용할 수 있다.

  • 알파벳
  • .
  • ? (아무 문자 가능)

또한 가능하면 ?를 적게 사용해야 한다.

그리고 모든 파일 이름은 길이가 동일하다.

 

2. 핵심 아이디어

모든 파일 이름의 같은 위치의 문자들을 비교하면 된다.

예를 들어 파일이 다음과 같다고 가정하자.

더보기
더보기

config.sys
config.inf
configures

각 인덱스를 비교하면

위치 문자 결과
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 ?

 

같은 위치의 문자가 모두 같으면 그대로 사용
하나라도 다르면 ? 사용

 

즉 알고리즘은 다음과 같다.

  1. 파일 이름들을 배열에 저장한다.
  2. 첫 번째 파일을 기준으로 각 문자 위치를 확인한다.
  3. 다른 파일들의 같은 위치 문자와 비교한다.
  4. 모두 같으면 해당 문자 출력
  5. 하나라도 다르면 ? 출력

[코드]

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