본문 바로가기

Algorithm

[Java] 백준 1032번 문제 명령 프롬프트

일단 문제부터 보겠습니다

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

 

1032번: 명령 프롬프트

첫째 줄에 파일 이름의 개수 N이 주어진다. 둘째 줄부터 N개의 줄에는 파일 이름이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일이름은

www.acmicpc.net

문제를 요약하면

입력할 파일의 개수를 입력하고

그다음 동일한 길이의 파일명을 입력하면

모든 파일명 중에서 같은 글자인 부분은 그대로 나오고 다른 부분은 '?'로 나오게 하면 됩니다

 

여기서 동일한 길이의 파일명이 아니라면 좀 귀찮았을 것 같네요

 

일단 코드를 먼저 보겠습니다

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner scan = new Scanner(System.in);
		int limit = scan.nextInt();
		String[] str = new String[limit];
		
		for(int i = 0 ; i < limit ; i++) str[i] = scan.next();
		
		boolean[] dif = new boolean[str[0].length()];
		for(int i = 0 ; i < str[0].length() ; i++) {
			for(int j = 0; j < limit-1; j++) {
				if(str[j].charAt(i) != str[j+1].charAt(i)) {
					dif[i] = true;
					break;
				}
			}
		}
		
		for(int i = 0; i < dif.length; i++) {
			if(dif[i]) System.out.print("?");
			else System.out.print(str[0].charAt(i));
		}
	}

}

 str은 파일명들이 들어올 String 배열입니다

여기서 한 글자씩 비교하려면 charAt(i)이라는 메서드를 사용하면 됩니다

 

charAt(i) 메서드는 해당 str의 i 인덱스에 있는 문자를 char 타입으로 반환해줍니다

그러면 비교하기 편합니다

그리고 만약 다른 부분이 생겼다면

그 부분은 boolean 배열인 dif에 true로 표시합니다

 

그리고 마지막에 dir가 true인 부분은 '?'

false인 부분은 문자 그대로 출력해주면 됩니다

 

감사합니다