본문 바로가기

코딩/파이썬

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

반응형

백준 1032번 문제인 명령프롬프트는 

브론즈 1 랭크의 문제이다.

 

문제가 장황하지만 안에 담겨있는 내용은 간단하다.

길이가 똑같은 여러개의 파일명을 입력받고,

파일명끼리 비교하여 서로 다른 부분을 물음표(?)처리하여 출력하는 것.

 

예제를 살펴보면 더욱 명확하다.

이 예제에서는 contest.txt와 context.txt를 비교하여

서로 다른 부분에 물음표 표시하여

conte?t.txt라는 문자를 출력하였다.

 

바로 정답 코드로 넘어가면 아래와 같다.

num = int(input())
data1 = list(input())

charnum = len(data1)
for i in range(num-1):
    data2 = list(input())
    for j in range(charnum):
        if (data1[j]!=data2[j]):
            data1[j] = "?"
print(''.join(data1))

num 변수에는 파일명의 갯수를 입력받았고,

data1에는 비교를 위한 파일명 1개를 리스트 형태로 입력받았다.

입력받은 파일명은 len 함수를 통해 문자의 수를 측정하였으며,

이는 인덱스번호를 이용해 문자끼리 비교하기 위해서이다.

 

만약 내가 num 변수에 2를 입력했고

data1 변수에 const라는 문자를 입력하였다면

charnum 변수에는 5라는 숫자가 들어가게 된다.

 

for문을 돌려서 0부터 1까지의 숫자를 순서대로 변수 i에 집어으며 차례대로 반복문이 실행된다.

data2 변수에는 conxt라는 문자를 입력하고,

두번째 for문을 돌려서 0부터 4까지의 숫자를 순서대로 j에 넣어 반복문을 실행한다.

 

두번째 for문에서는 if문을 이용해

만약 data1변수에 들어있는 const문자의 [0]번부터 [4]번 인덱스까지의 값인 'c', 'o', 'n', 's', 't'를

data2변수에 들어있는 conxt 문자의 [0]번부터 [4]번 인덱스까지의 값인 'c', 'o', 'n', 'x', 't'와 비교하여

서로 다른 값을 갖고 있는 [3]번 인덱스의 값을 물음표(?)로 바꿔준다.

이 과정이 진행되면 data1변수에는 con?t라는 값이 리스트 형태로 담기게 된다.

data1 = ['c', 'o', 'n', '?', 't'] 이렇게 말이다.

그럼 이걸 ''.join함수를 이용해 빈칸을 이어붙인다.

 

join함수는 리스트 형태의 데이터에 들어있는 요소를 모두 합쳐 하나의 문자열로 바꿔준다.

before = ['a', 'b', 'c']
after = ''.join(before)
print(after)

위 코드를 실행시키면 abc라는 값이 출력된다.

 

join 함수 앞에 있는 ''는 구분자 옵션이다.

위 예제에서는 공백을 넣어주었지만

만약 ','.join(before)이라고 해주었으면

문자 사이에 공백 대신 콤마(,)가 들어가서

결과값이 a,b,c로 출력되었을 것이다.

반응형