본문 바로가기
Algorithm Problem Solving/BaekJoon

[BaekJoon] 백준 1032 명령 프롬프트 (Python / 파이썬)

by ʚ⇜❅🎕̈❄⇝ɞ 2021. 8. 16.
728x90
반응형

BaekJoon 백준 1032 명령 프롬프트 문제는 명령 프롬프트에서 원하는 파일을 찾으려면 "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지 구하는 문제이다. 난이도는 Bronze 1이다.

 

BaekJoon 1032 명령 프롬프트 문제 정보

출처

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

난이도

- 브론즈 1 / Bronze 1

 

명령 프롬프트 문제 요약

  • 명령 프롬프트에서 원하는 파일을 찾으려면 다음과 같이 하면 된다.
    • dir *. exe라고 치면 확장자가 exe인 파일이 다 나온다.
    • "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a? b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다.
    • 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.
  • 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면?을 적게 써야 한다. 그 디렉터리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.
  • 파일 이름의 개수 N이 주어진다. N은 50보다 작거나 같은 자연수이고 파일 이름의 길이는 모두 같고 길이는 최대 50이다. 파일 이름은 알파벳과 "." 그리고 "?"로만 이루어져 있다.
  • 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지 구하여 출력한다.

 

문제 풀이 과정

  1. 파일이 1개이면 파일 이름 그대로 패턴으로 출력한다.
  2. 2개 이상이면 1, 2번째 파일 이름을 한 글자씩 비교하여 같으면 해당 문자를, 다르면?를 패턴에 넣는다.
  3. 파일이 2개면 패턴을 출력한다.
  4. 3개 이상이면 파일 비교 횟수 변수를 선언하고, 모든 파일의 비교가 끝날 때까지 파일 이름과 패턴을 비교하여 갱신한다.
  5. 패턴을 출력한다.

 

코드 및 설명
def pattern_matching(ptn, file_name):
    global cnt
    cnt += 1  # 파일 비교 횟수
    for i in range(file_len):
        if ptn[i] != file_name[i]:
            ptn[i] = '?'
            
    # 모든 파일 비교했으면 종료
    if cnt == N:
        return ptn
    else:
        return pattern_matching(ptn, file[cnt])


N = int(input())
file = []
for _ in range(N):
    file.append(input())

# 파일이 1개일 때 그대로 출력
if N == 1:
    print(file[0])
    
# 파일이 2개 이상일 때
else:
    file_len = len(file[0])  # 파일 이름의 길이
    # 1, 2번 째 파일 비교하여 패턴을 구한다.
    pattern = []
    for i in range(file_len):
        # 같으면 같은 문자 넣기
        if file[0][i] == file[1][i]:
            pattern.append(file[0][i])
        # 같지 않으면 ? 넣기
        else:
            pattern.append('?')

    # 파일이 3개 이상이면
    if N > 2:
        cnt = 2  # 파일 비교 횟수
        print("".join(pattern_matching(pattern, file[2])))
    # 파일이 2개면 패턴 출력
    else:
        print("".join(pattern))

BaekJoon 백준 1032 명령 프롬프트 문제를 파이썬 python으로 풀어보았고, 난이도는 Bronze 브론즈 1이다. 

728x90
반응형

댓글