[백준] 1032번 - 명령 프롬프트 (파이썬)

2022. 9. 4. 16:51·🎲 알고리즘 공부/백준

[문제]
시작 -> 실행 -> cmd를 쳐보자. 검정 화면이 눈에 보인다. 여기서 dir이라고 치면 그 디렉토리에 있는 서브디렉토리와 파일이 모두 나온다. 이때 원하는 파일을 찾으려면 다음과 같이 하면 된다.

 

dir *.exe라고 치면 확장자가 exe인 파일이 다 나온다. "dir 패턴"과 같이 치면 그 패턴에 맞는 파일만 검색 결과로 나온다. 예를 들어, dir a?b.exe라고 검색하면 파일명의 첫 번째 글자가 a이고, 세 번째 글자가 b이고, 확장자가 exe인 것이 모두 나온다. 이때 두 번째 문자는 아무거나 나와도 된다. 예를 들어, acb.exe, aab.exe, apb.exe가 나온다.

 

이 문제는 검색 결과가 먼저 주어졌을 때, 패턴으로 뭘 쳐야 그 결과가 나오는지를 출력하는 문제이다. 패턴에는 알파벳과 "." 그리고 "?"만 넣을 수 있다. 가능하면 ?을 적게 써야 한다. 그 디렉토리에는 검색 결과에 나온 파일만 있다고 가정하고, 파일 이름의 길이는 모두 같다.

 

입출력 예시

 

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

 

1032번: 명령 프롬프트

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

www.acmicpc.net

 

 

 


🎨 풀이

💡 전체 코드

import sys

n = int(input())
file = []
answer = ''

for _ in range(n):
    file.append(sys.stdin.readline())

for i in range(len(file[0])):
    status = True
    for j in range(0,n-1):
        if file[j+1][i] != file[j][i]:
            status = False
            break
    if status == True:
        answer += file[0][i]
    else :
        answer += '?'

print(answer)

> 핵심 : 글자가 일치하는 지 순서대로 비교하면 된다 

설명을 위한 그림

 

🍦 코드 설명 (실행 순서대로 나열)

# main

n = int(input())
file = []
answer = ''

1. n을 입력받는다.

 - n : 파일 이름 개수

 - file : 파일 이름이 들어갈 리스트

 - answer : 정답 (for문 결과에 따라 한글자씩 추가될 예정)

 

for _ in range(n):
    file.append(sys.stdin.readline())

2. for문을 n번 반복하며 file에 이름을 하나씩 입력받아 넣는다.

 

for i in range(len(file[0])):
    status = True
    for j in range(0,n-1):
        if file[j+1][i] != file[j][i]:
            status = False
            break
    if status == True:
        answer += file[0][i]
    else :
        answer += '?'

3. for문을 이용해서 같은 위치의 글자끼리 비교한다.

 - len(file[0])이 범위인 for문은 한글자씩 보기 위해 적어둔 것이기 때문에 상위 for문으로 뒀다. 

4. 만약, file[j+1][i]와 file[j][i]가 같지 않다면 status를 False로 바꾼 후 for문을 종료한다.

5. status가 True라면 answer에 file[0][i]를 추가하고, 아니라면 answer에 ?를 추가한다.

 - file[0][i]를 넣는 이유는 예제 5번 같은 경우 때문이다.

 - 예제 5번은 파일이름이 하나라서 두번째 for문은 통과하지 않고 들어온다.

 - 그렇기 때문에 file[j][i] 이렇게 썼다가는 j를 모르는 상태라서 오류가 난다. 그래서 안전하게 file[0][i]를 넣어주는 것이다.

 

print(answer)

6. answer을 출력한다.


끝~

⭐ 느낀점

> 재밌다재밌서~ 질문게시판에 올라와서 반례 찾아주려고 풀었지만.. 그새 다른 답변이 달려버렸더라. ^ㅁ^; 그냥 문제 푼 사람 되어버렸다. 그래도 잘 풀었다 잘했다~

'🎲 알고리즘 공부 > 백준' 카테고리의 다른 글

[백준] 2902번 - KMP는 왜 KMP일까? (파이썬)  (0) 2022.09.06
[백준] 2455번 - 지능형 기차 (파이썬)  (0) 2022.09.05
[백준] 2490번 - 윷놀이 (파이썬)  (0) 2022.09.03
[백준] 2442번 - 별 찍기 5 (파이썬)  (0) 2022.09.02
[백준] 10773번 - 제로 (파이썬)  (0) 2022.09.01
'🎲 알고리즘 공부/백준' 카테고리의 다른 글
  • [백준] 2902번 - KMP는 왜 KMP일까? (파이썬)
  • [백준] 2455번 - 지능형 기차 (파이썬)
  • [백준] 2490번 - 윷놀이 (파이썬)
  • [백준] 2442번 - 별 찍기 5 (파이썬)
듬듬
듬듬
  • 듬듬
    두드림
    듬듬
  • 전체
    오늘
    어제
    • 분류 전체보기 (280)
      • 📑 신입일기 (35)
      • 🍪 Web (1)
        • angular (1)
        • JavaScript (0)
      • 🧩 Node.js 공부 (2)
      • 🎲 알고리즘 공부 (192)
        • 프로그래머스 (76)
        • 백준 (96)
        • 코드업 (19)
      • 🎨 Tistory Customizing (1)
      • 💌 일상 (12)
        • 일상 (5)
        • 기록 (7)
      • 📜 자격증 (2)
        • 정보처리기사 (2)
      • 📗 spring boot 공부 (9)
      • 학교 공부 (20)
        • ICT 개론 (14)
        • 리눅스 (6)
      • ChatGPT 랑 놀기 (0)
  • 블로그 메뉴

    • 홈
    • 방명록
    • 글쓰기
  • 링크

    • 깃허브
  • 공지사항

  • 인기 글

  • 태그

    백준
    스프링 부트
    스프링부트
    폰켓몬
    프로그래머스
    파이썬
    신입일기
    정처기
    til
    nodejs
    6월 목표
    코드업
    티스토리챌린지
    충무로
    컨텐더스
    오블완
    연습문제
    카카오
    codeup
    코테
    행렬덧셈
    찬양추천
    BOJ
    코린이
    피보나치수
    정보처리기사
    오버워치
    50문답
    일기
    코민이
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
듬듬
[백준] 1032번 - 명령 프롬프트 (파이썬)
상단으로

티스토리툴바