hahn

[백준 - JAVA] 명령 프롬프트 본문

코딩테스트 연습/백준(JAVA)

[백준 - JAVA] 명령 프롬프트

hahn 2021. 9. 14. 18:28
728x90
반응형

1032번: 명령 프롬프트 (acmicpc.net)

 

1032번: 명령 프롬프트

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

www.acmicpc.net

http://boj.kr/6d921a9602844c4da6414aaef93a3a3e

 

공유 소스 보기

 

www.acmicpc.net

더보기
import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
		
		int input = sc.nextInt(),
			whileCondition = 0, subString;
		
		String[] strArr = new String[input];
		
		String result, compare = null;
		
		boolean pardon;
		
		char pardonChar;
		
		for(int i = 0; i < input; i++) {
			
			strArr[i] = sc.next();
			
		}
		
		subString = strArr[0].length();
		
		while(whileCondition != input) {
			
			whileCondition = 0;
			
			compare = strArr[0].substring(0, subString--);
			
			for(int i = 0; i < strArr.length; i++) {
				
				if(strArr[i].indexOf(compare) == 0) whileCondition++;
				
			}
			
		}
		
		for(int i = subString + 1; i < strArr[0].length(); i++) {
			
			pardon = true;
			pardonChar = strArr[0].charAt(i);
			
			for(int j = 0; j < strArr.length; j++) {
				
				if(pardonChar != strArr[j].charAt(i)) pardon = false;
				
			}
			
			if(pardon) {
				compare += pardonChar;
			}else {
				compare += "?";
			}
			
		}
		
		System.out.println(compare);
        
    }
    
}

입력 문자열의 길이는 모두 똑같으니까

 

다른 거 고려할 거 없이 처음 입력받는 문자 기준으로

 

뒤에서부터 잘라서 비교했다.

 

비교는 indexOf를 사용했는데

 

자른 문자열 전체가 다른 문자열에 속하면서

 

문자열의 시작부터 일치해야 하므로

 

0과 같다면으로 조건 처리했다.

 

처음 실패한 거는 중간만 ?가 들어가는 상황을 고려하지 않았기 때문이다.

 

뒤에 새로 for문 추가해서 해결했는데

 

저렇게 비교할 거면 indexOf 안 써도 되는데

 

시간은 어떤 게 더 빠른지 모르겠다.

 

++ 작성하면서 생각해본 거 해봤다.

더보기

 

import java.util.Scanner;

class Main{
    
    public static void main(String[] args){
        
        Scanner sc = new Scanner(System.in);
		
		int input = sc.nextInt();
		
		String[] strArr = new String[input];
		
		String result = "";
		
		boolean pardon;
		
		char pardonChar;
		
		for(int i = 0; i < input; i++) {
			
			strArr[i] = sc.next();
			
		}
		
		for(int i = 0; i < strArr[0].length(); i++) {
			
			pardon = true;
			pardonChar = strArr[0].charAt(i);
			
			for(int j = 0; j < strArr.length; j++) {
				
				if(pardonChar != strArr[j].charAt(i)) pardon = false;
				
			}
			
			if(pardon) {
				result += pardonChar;
			}else {
				result += "?";
			}
			
		}
		
		System.out.println(result);
        
    }
    
}

코드 자체는 얘가 더 깔끔한 듯하다.

728x90
반응형