PS/BOJ&Programmers

[백준/1032] 명령 프롬프트 | 문자열 비교

sebinChu 2023. 7. 4. 02:31

명령 프롬프트

알고리즘

문자열 비교 알고리즘이다.

이런 문제를 풀 때는

 

  1. 모든 보기를 다 비교해야 할지, 일부로도 해결이 가능한지 판단한다.
  2. 어차피 N의 범위가 적으니까 할 수 있는 건 다 해서 풀어낸다.

전체 코드

내가 작성한 코드

import sys; input=sys.stdin.readline

n=int(input())
file=[input() for _ in range(n)]
tmp=[]

for i in range(n):
    for j in range(i+1, n):
        if file[i] != file[j]:
            a = file[i]
            b = file[j]
            
            for k in range(len(a)):
                for l in range(len(b)):
                    if a[k] != b[k] : 
                        tmp.append(k)
                        break

tmp = set(tmp)        
name = list(file[0])

for i in tmp:
    name[i] = '?'
print(''.join(name))

모든 문자열을 비교해준다.  입력 받은 값들 중에 다른 값이 있다면 그 값에 해당하는 인덱스를 저장하고, 다른 값이 있는 인덱스 부분은 ?로 변경한다. 이때 문자열은 불변값이므로 리스트를 활용한다.

 

 

백준 hizuk님 코드

N = int(input())

cmds = [list(input()) for _ in range(N)]

ans = cmds[0]

for cmd in cmds:
    for i in range(len(cmd)):
        if ans[i] != cmd[i]:
            ans[i] = "?"

print("".join(ans))

문자열은 어차피 가변이니 다시 리스트로 바꾸어줘야 하기 때문에 입력을 list로 받아주었다.

하나의 문자열과 다른 문자열을 비교하면서 즉, 기준을 세워서 효율적인 코드를 작성하였다.


알게된 점

  • 문자열은 가변이니 처음부터 리스트로 시도해도 좋다.
  • for문 Tip: 이차원 리스트일 때는 for item in items로 쓰면 간결하다.
  • 일일이 모든 걸 다 해야할까...?라는 합리적 의심
  • 꼼수같지만 꼼수 아니고 실력임