백준
11478: 서로 다른 부분 문자열의 개수
rabbit-jun
2026. 3. 4. 15:53
링크:https://www.acmicpc.net/problem/11478
유튜브:https://youtu.be/ZtoOahFlmkI
틀린 정답
import os
reader = os.read(0,os.fstat(0).st_size)
def solve(reader):
num = len(reader)
result=[]
for i in range(1,num+1):
start=0
end= i
for _ in range(num):
result.append(reader[start:end])
if end ==num:
break
start +=1
end +=1
os.write(1,b'%d' %len(set(result)))
return 0
solve(reader)
피드백
로컬(개인 컴퓨터) 테스트 환경에서는 엔터 키 입력 없이 딱 5글자만 들어가도록 깔끔하게 처리가 된 것 같습니다.
하지만 백준 서버의 채점 환경(리눅스) 에서는 이야기가 조금 다릅니다. 백준의 테스트 케이스 입력 파일들은 보통 맨 마지막에 줄바꿈 문자(\n)를 포함하고 있습니다.
따라서 백준 서버가 os.read로 입력 파일을 통째로 읽어올 때는 b'ababc'가 아니라 b'ababc\n'처럼 뒤에 특수 문자가 붙어서 들어오게 됩니다. (이 경우 길이는 6이 됩니다.)
결국 이 \n 문자까지 하나의 글자로 취급되어 b'c\n', b'bc\n' 같은 원치 않는 부분 문자열들이 만들어졌기 때문에 오답 판정을 받은 것입니다. 작성하신 이중 for문 로직 자체는 아주 정확합니다.
나의 정답(444ms)
import os
reader = os.read(0,os.fstat(0).st_size).rstrip()
def solve(reader):
num = len(reader)
result=[]
for i in range(1,num+1):
start=0
end= i
for _ in range(num):
result.append(reader[start:end])
if end ==num:
break
start +=1
end +=1
os.write(1,b'%d' %len(set(result)))
os._exit(0)
return 0
solve(reader)
반응형