명령 프롬프트
알고리즘
문자열 비교 알고리즘이다.
이런 문제를 풀 때는
- 모든 보기를 다 비교해야 할지, 일부로도 해결이 가능한지 판단한다.
- 어차피 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로 쓰면 간결하다.
- 일일이 모든 걸 다 해야할까...?라는 합리적 의심
- 꼼수같지만 꼼수 아니고 실력임
'PS > BOJ&Programmers' 카테고리의 다른 글
[백준/1015] 수열 정렬 (1) | 2023.09.30 |
---|---|
[백준/11004] K번째 수 | Python 정렬 함수의 알고리즘 (0) | 2023.08.02 |
[백준/1009] 분산 처리 | 반복되는 숫자 어떻게 효율적으로 처리할까 (0) | 2023.07.03 |
[백준/10158] 개미 | 점화식 그게 뭔데 그거 어떻게 하는 건데 (0) | 2023.06.29 |
[백준/9252] 음식물 피하기 | 배운 점이 많은 문제 (0) | 2023.05.12 |