2023 주니어 SRE 엔지니어 후레임

반응형

 

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

 

1032번: 명령 프롬프트

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

www.acmicpc.net

 

 

문자열 처리에 관한 문제입니다.

문제가 복잡해보이지만, 한마디로 정리하면 이렇습니다.

 

"한 열씩 비교하여 셋 다 같으면 공통된 문자를 그대로 출력하고, 그 중 하나라도 다르면 ?를 출력해라"

 

 

문제에는 제시되지 않은 반례를 먼저 알려드리겠습니다.

 

[입력]

3

abc

bbc

aba

 

[출력]

?b?

 

이렇게 앞부분에 서로 다른 문자가 나올 수도 있습니다.

저도 처음에 이 부분을 놓쳐서 코드를 다시 설계했습니다.

 

이제 답을 보시죠.

 

import java.util.Arrays;
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {

		boolean chk[]; // 몇 번째 열이 서로 다른 문자인지 체크하기 위한 배열(false==다같음, true==서로 다름) 

		Scanner sc = new Scanner(System.in);
		String[] str = new String[51];
		int n = sc.nextInt(); // 문자열을 몇 줄 입력받을 것인가?
		sc.nextLine();
			
		for (int i = 0; i < n; i++) {
			str[i] = sc.nextLine();
		}
		
		chk = new boolean[str[0].length()];
		Arrays.fill(chk, false); // chk[]의 기본값은 false

		if (n == 1) {
			System.out.println(str[0]); // 1줄인 경우에는 비교할 것도 없이 바로 출력
		} else {

			for (int i = 0; i < str[0].length(); i++) { // 한 글자씩 비교하겠다
				for (int j = 1; j < n; j++) { // 첫번째 줄을 기준으로, 나머지 줄을 비교
					if(!(str[0].substring(i,i+1).equals(str[j].substring(i,i+1))))
					{ // 첫번째 줄의 i번째 글자와 j번째 줄의 i번째 글자가 다른지 비교
						chk[i]=true; // 글자가 서로 다르면 i번째는 true 
						break; // i번째 글자는 이미 다른게 판명 났으므로 더 비교할 필요 X
					}
				}
			}
			
			for(int i=0; i<str[0].length(); i++) {
				if(chk[i]==false) { // false면(i번째 글자가 같으면)
					System.out.print(str[0].substring(i,i+1));
				}
				else { // true면(i번째 글자가 서로 다르면)
					System.out.print("?");
				}
			}
		}
	}
}
반응형

이 글을 공유합시다

facebook twitter googleplus kakaoTalk kakaostory naver band