Baekjoon 문제 풀기 (1032번 : 명령 프롬프트) Python

1032번 : 명령 프롬프트

1. 문제읽기


문자열 비교하기

문자열을 입력받아 각각의 자리를 비교하면 되는 문제이다.
아래 세가지 문제만 해결할 수 있으면 된다.

  1. 문자열을 어떤 식으로 받을 것인가
  2. 문자열을 어떻게 비교할 것인가
  3. 비교한 문자열을 어떻게 출력할 것인가

2. 제출 코드


1번을 고민하다가 처음에는 이차원배열을 쓰려고 했는데, 잘 안풀려서 그냥 모든 문자열을 하나로 합쳐버렸다.
그리고 합친 문자열 하나를 길이로 나눠서 for문의 변수가 길이만큼 + 되게 만들었고, for문을 돌면서 같은 값이라면 변수에 갱신해서 비교 if문의 총 횟수를 count로 셌다.
count가 비교 횟수랑 같다면 비교했던 문자열이 모두 같다는 뜻이므로 그 문자열의 값을 출력하고, 같지 않다면 하나라도 다른 문자라는 뜻이 되므로 ?를 출력했다.

import sys

n = int(input())
arr = ""
length = 0

for _ in range(n):
    arr += sys.stdin.readline().strip()
    length = len(arr)

target = len(arr)//n


for j in range(target):  # j = 0부터 9까지
    diff = arr[j]
    count = 0
    for i in range(0, len(arr), target):  # i = 0부터 29까지 10씩 = 0, 10, 20

        if diff == arr[j+i]:
            diff = arr[j+i]
            count += 1

    if count == n:
        print(diff, end='')
    else:
        print("?", end='')

3. 공부할 것


역시나 다른 사람들의 코드를 보니 매우 짧게 잘 짰다..
나는 입력값을 무조건 앞쪽에 다 받아놓고 시작하려고 했는데 그게 문제였던 것 같다.

문자열 하나를 입력받고 변수에 넣어준 뒤, 다른 입력값을 받아 두개를 비교해준다.
이 때 먼저 받았던 문자열 중 비교값이 틀리면 그 위치에 ?를 삽입해준다.
문자열은 삽입이 불가능하므로 처음부터 list로 받아주면 된다.

import sys

n = int(sys.stdin.readline().strip())
a = list(sys.stdin.readline().strip())

for _ in range(n-1):  # 비교 행위이므로 n-1번 반복
    b = list(sys.stdin.readline().strip())
    for i in range(len(a)):
        if a[i]!=b[i]:
            a[i] = "?"
            
print(''.join(a))

맞은 문제지만 다음에 다시 풀어봐야겠다.

댓글남기기