파일 이름을 모두 리스트에 저장한 뒤, list[i][j]와 같은 2차원 리스트 조작 형식으로 리스트 내 파일 이름들을 char 단위로 글자 하나씩 비교한다.
file[]로 저장한다.range(len(file[0]))의 범위로 반복하도록 한다.range(1, N)의 범위로 반복하도록 한다.file[j][i]들 중 기준이 되는 file[0][i]과 하나라도 다른게 있다면 answer[]에 "?"를 저장하고, 모두 동일하다면 file[0][i]를 answer[]에 저장한다.answer[]를 하나의 문자열 형태로 한 줄로 출력한다. 메모리: 32544 KB, 시간: 48 ms
import sys
input = sys.stdin.readline
N = int(input())
file = [str(input()) for _ in range(N)]
answer = []
for i in range (len(file[0])):
flag = 1
tmp = file[0][i]
for j in range(1, N):
if file[j][i] != tmp:
flag = 0
if flag == 1:
answer.append(tmp)
else:
answer.append("?")
print("".join(answer))
(맞았으므로 생략)
file = [str(input()) for _ in range(N)]
1) input(), 즉 sys.stdin.readline()은 기본적으로 문자열을 반환하므로 str()로 감쌀 필요가 없다.
2) sys.stdin.readline()은 개행 문자(\n)을 포함하므로, 문자열을 다루는 이 문제에서는 안전하게 strip()을 통해 제거하는 것이 좋다.
수정 코드:
file = [input().strip() for _ in range(N)]
all() 사용flag = 1
tmp = file[0][i]
for j in range(1, N):
if file[j][i] != tmp:
flag = 0
1) flag 변수를 통해 if file[j][i] != tmp를 체크하는 방식을 사용하고 있다. 그러나 all()를 사용한다면 조금 더 깔끔하게 작성할 수 있다.
수정 코드:
tmp = file[0][i]
if all(file[j][i] == tmp for j in range(1, N)):
all()은 모든 값이 True, 즉 file[j][i] == tmp일 때만 True를 반환하므로 flag 변수가 필요 없어진다.
cf) if flag == 1은 if flag:로 사용할 수 있음
import sys
input = sys.stdin.readline
N = int(input())
file = [input().strip() for _ in range(N)] # 개행 문자 제거
answer = []
for i in range(len(file[0])):
tmp = file[0][i]
if all(file[j][i] == tmp for j in range(1, N)): # all() 사용
answer.append(tmp)
else:
answer.append("?")
print("".join(answer)) # 리스트를 문자열로 변환하여 출력
sys.stdin.readline()이 str 타입으로 들어오고, 개행 문자(\n)가 포함된다는 것을 기억하자.all()함수에 대해 잘 알아두자.all(): 리스트, 튜플과 같은 반환 가능한(iterable) 객체의 모든 요소가 True일 경우 True를 반환하는 내장 함수. 시간 복잡도: O(N)
print(all([True, True, True])) # ✅ 모든 값이 True → True 반환
print(all([True, False, True])) # ❌ False가 포함 → False 반환
print(all([])) # ✅ 빈 리스트는 기본적으로 True 반환
리스트의 모든 요소가 특정 조건을 만족하는지 검사할 때 사용하면 좋음.
nums = [2, 4, 6, 8]
print(all(num % 2 == 0 for num in nums)) # ✅ 모든 숫자가 짝수 → True 반환
nums = [2, 3, 6, 8]
print(all(num % 2 == 0 for num in nums)) # ❌ 홀수(3) 포함 → False 반환