sohnryang   5년 전

그냥 LCS 문제 맞아서 한글 입력만 받을 수 있도록 약간만 수정했는데 틀리네요...

참고용으로 LCS 코드는 여기에서 보실수 있습니다.

zxcvber   5년 전

문제의 조건에 입력으로 주어지는 문자열이 UTF-8로 인코딩된다고 언급되어 있는데요,

채점과정 컴파일 옵션에서는 g++을 사용하는데, g++에서 UTF-8로 인코딩을 하면 한글 문자 하나당 3 byte 를 차지하게 됩니다.

그 부분에서 문제가 있는 것 같습니다.

윈도우에서 cmd에 직접 쳐서 실행하는 경우와

UTF-8로 인코딩한 파일을 입력으로 주는 경우 출력의 결과가 다르더군요

아마 cmd가 인코딩이 cp949 여서 그런 것 아닌가 추측해 봅니다.

sohnryang   5년 전

??? 저는 리눅스에서 코딩했는데...

sohnryang   5년 전

한번 디버깅해 보겠습니다. 답변 감사드립니다.

zxcvber   5년 전

아 cmd 인코딩이 cp949 인 것은 윈도우에서 제가 실험한 것에 대한 얘기였습니다. 혼란을 드려 죄송합니다 :)

다만 3 byte 씩 확인하는 작업은 하셔야 할 것 같습니다!

그리고 희한하게도 wstring 으로는 안되는데 그냥 char[] 로는 되더군요... (같은 코드에서 자료형만 바꿨습니다)

참고하시면 좋을 것 같습니다...!

zxcvber   5년 전

혹시 wstring 으로 해결하시게 된다면 알려주시면 감사하겠습니다!

sohnryang   5년 전

제가 ideone에서 실험해봤는데 제 컴퓨터하고도 다른 결과가 다릅니다. (예제 입출력 중 하나인 백준온라인/최백준 에서도)

컴파일러 버전 차이인것 같네요

제 컴퓨터의 컴파일러(g++) 버전이 8.2.1, ideone 컴파일러 버전이 6.3, 백준 채점 환경에서 7.3.0이네요.

sohnryang   5년 전

아 구글링할수록 멘붕이네요...

그냥 나중에 파이썬으로 풀어야겠습니다.

해결된것같지는 않지만 해결됨으로 표시는 하겠습니다.

zxcvber   5년 전

아 그리고 깃헙에 등록하신 이메일 수신내역 한번 확인 부탁드려도 될까요??? 연락드렸습니다!

zxcvber   5년 전

작성하신 소스코드 https://www.acmicpc.net/source... 를 보고 왔는데요,

  1. Unicode가 3 byte 씩 차지하기 때문에 in_a, in_b 의 길이를 조정하셔야 합니다.
  2. 같은 이유로, 문자가 같은지 비교하려면 3 바이트씩 비교해야 합니다.
  3. 재귀 호출 과정에서 lcs(n - 3, m), lcs(n, m - 3) 와 같이 하는 경우 n, m 의 값이 -1 이 되는 경우가 발생하지 않습니다.

댓글을 작성하려면 로그인해야 합니다.