인프런 커뮤니티 질문&답변

한혜경님의 프로필 이미지
한혜경

작성한 질문수

2주만에 통과하는 알고리즘 코딩테스트 (2024년)

투포인터

LIS/LCS 2번 문제

해결된 질문

작성

·

165

1

안녕하세요! 질문드립니다~

추가강의 LIS/LCS 2번 문제(#9251)를 백준에서 채점을 하다가 발견한 사실인데요

아래 정답 코드에서

import sys
sys.stdin =  open('/Desktop/dev/BackJoon/추가강의/LIS/9251.txt','r')
sys.setrecursionlimit(999999)
input = sys.stdin.readline

A = str(input())
N = len(A)
B = str(input())
M = len(B)

dp = [[0]*(M+1) for _ in range(N+1)]

for i in range(1,N+1):
    for j in range(1,M+1):
        # if A[:i][-1] == B[:j][-1]:
        if A[i-1] == B[j-1]:
            dp[i][j] = dp[i-1][j-1]+1
        else: 
            dp[i][j] = max(dp[i-1][j], dp[i][j-1])


print(dp[N][M])

 

import sys
sys.stdin =  open('/Desktop/dev/BackJoon/추가강의/LIS/9251.txt','r')
sys.setrecursionlimit(999999)
input = sys.stdin.readline

위의 이 부분을 지우고 돌리면 성공하는데, 위의 부분이 있을 때 채점 초반에 틀렸다고 하네요.

 

혹시 이번 문제에서는 input이 띄어쓰기가 없는 문자열이라서

input = sys.stdin.readline

부분 때문에 에러가 난 것인지 궁금해서 질문드립니다!

답변 2

0

코딩 센세님의 프로필 이미지
코딩 센세
지식공유자

질문 감사합니다!

 

헉.. 일반적으로 input = sys.stdin.readline 코드로 인해서 문제가 발생하는건 보통 문제 출제자의 오류의 가능성이 높습니다! 백준의 문의하기를 이용해서 문제에 오류가 있는지 확인해달라는 글을 작성해보시면 해당 오류의 이유를 찾으실 수 있으실 것 같아요 🙂

0

안녕하세요, 인프런 AI 인턴입니다.
CodeMaster님, 질문하신 부분에 대해 답변드리겠습니다.

sys.stdin.readline은 입력받은 문자열의 끝에 개행문자(‘\n’)를 포함하므로 문자열 처리 과정에서 개행문자가 포함될 가능성이 있습니다. 이 경우 input() 함수를 사용할 때와 다르게 불필요한 개행문자가 문자열 안에 들어가서 정답 판정에 영향을 줄 수 있습니다.

문제에서 input을 처리할 때는 입력받은 문자열에서 마지막의 개행문자를 제거하기 위해 strip() 함수를 사용하면 좋습니다. 예를 들어, AB 문자열을 입력받는 부분을 아래와 같이 수정할 수 있습니다.

A = input().strip()
B = input().strip()

이때 AB에는 띄어쓰기가 없는 문자열이 들어가므로 strip() 함수를 통해 개행문자를 제거해주면 채점 시 문제가 되지 않을 것입니다.

위 코드를 수정하여 다시 시도해보세요.

한혜경님의 프로필 이미지
한혜경

작성한 질문수

질문하기