본문 바로가기
PS 문제 풀이/Baekjoon

[BOJ] 백준 1032 명령 프롬프트

by 까망 하르방 2021. 8. 23.
반응형

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

Approach

문자열의 길이가 모두 동일하며 asterisk(*) 같은 특수문자가 없어서

어렵지 않게 구현할 수 있는 문제이다.

 

N개의 문자열이 주어질 때, 첫번째 문자열을 기준으로 

다른 문자열에서 특정 위치의 문자가

- 모두 같다면 → '해당 문자'

- 한개라도 다른 경우 → '?'

 

C++

#include <iostream>
#include <string>

using namespace std;

int N, len;
string pivot, tmp;

int main(void)
{
	// freopen("input.txt", "r", stdin);
	cin >> N >> pivot;
	
	string ans = pivot;
	len = pivot.length();
	while (N-- > 1)
	{
		cin >> tmp;
		for (int i = 0; i < len; i++)
		{
			if (pivot[i] != tmp[i])
			{
				ans[i] = '?';
			}
		}
	}
	cout << ans << "\n";
}

 

Java

import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		
		// 1 <= N <= 50 (자연수)
		int N = Integer.parseInt(sc.next());
		
		String[] str = new String[N];
		for(int i=0; i<N; i++) {
			str[i] = sc.next();
		}
		
		int len = str[0].length();
		char[] result = new char[len];
		
		
		
		// 입력된 문자열의 모든 문자에 대해(문자열의 길이는 동일하다.)
		for(int i=0; i<len; i++) {
			
			boolean flag = false;
			
			// 해당 위치(index)의 모든 문자열을 비교해서 특정문자열인지 '?'인지 판단한다.
			for(int j=0; j<N-1; j++) {
				if(str[j].charAt(i) != str[j+1].charAt(i)) {
					flag = true;
					break;
				}
			}
			
			if(flag) { // 한개의 문자열에서 문자값이 다르다. (flag = true)
				result[i] = '?';
			}else { // 모든 문자열에서 해당 위치의 문자가 동일하다. (flag = false)
				result[i] = str[0].charAt(i);
			}
		}
		
		System.out.println(result);
		
	}
}
반응형

'PS 문제 풀이 > Baekjoon' 카테고리의 다른 글

[BOJ] 백준 1085 직사각형에서 탈출  (0) 2021.08.25
[BOJ] 백준 1037 약수  (0) 2021.08.24
[BOJ] 백준 1026 보물  (0) 2021.08.22
[BOJ] 백준 12101 1, 2, 3 더하기 2  (0) 2021.08.10
[BOJ] 백준 9095 1, 2, 3 더하기  (0) 2021.08.09

댓글