본문 바로가기
자바 코딩테스트

1032 명령 프롬프트

by 백엔드 개발자 2025. 3. 31.

이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.

입력

첫째 줄에 파일 이름의 개수 N이 주어진다.

둘째 줄부터 N개의 줄에는 파일 이름이 주어진다.

N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다.

파일이름은 알파벳 소문자와 '.' 로만 이루어져 있다.

사용한 것

1. BufferedReader과 BufferedWriter

 

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));        
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

 

이걸 쓴 이유는 입력이랑 출력을 Scanner나 system.out.println 이런 것들보다 빠르게 할 수 있어서.

주의할 점은 BufferedWriter를 썼으면 write, flush하고 BufferedReader와 BufferedWriter를 close해줘야 한다는 것.

 

왜냐면 내부적으로 버퍼를 사용하기 때문에 flush로 강제로 출력하고 남은데이터를 close로 정리한다.

 

2. StringBuilder

 

String은 불변이라서 변경이 안된다.

그래서 변경이 필요한 문제였기 때문에 사용.

 

 

 

 

풀이

  • StringBuffer를 만들어서 입력을 받는다.
    • 첫번째는 문자열 개수
    • 2번째 부터는 하나씩 넣는다.
    • 비교대상의 문자열은 입력받은 첫번째 문자열로 했다.
  • 모든 파일이름들의 같은 자리수를 비교해서 하나라도 다른 값이 있으면 그값은 ?로 바꾼다.
  • 전부 다 같으면 그건 그 단어로 바꾼다.

 

 

public class Main {
    public static void main(String[] args) throws IOException {

        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        int dirIndex = Integer.parseInt(br.readLine());
        String [] dirList = new String[dirIndex];
        StringBuilder dirString = new StringBuilder();
        for(int i = 0; i < dirIndex; i++) {
            dirList[i] = br.readLine();
        }
        dirString.append(dirList[0]);

        //한글자씩 비교해서 다른 글자가 있으면 ?로 바꾼다.
        for (int i = 0; i < dirList[0].length(); i++) {
            for (int j = 1; j < dirIndex; j++) {
                if (dirString.charAt(i) != dirList[j].charAt(i)) {
                    dirString.replace(i,i+1, "?");
                }
            }
        }
        bw.write(dirString.toString());
        bw.flush();
        br.close();
        bw.close();
    }
}