asd0014a   1년 전

이 문제의 조건이...

테스트의 케이스 개수(T)는 최대 1000번 / 문자 개수(S)는 최대 20개 / 반복(R)은 최대 8번

이렇게 돼있어서, 문자 개수도 20개까지 해보고 반복 또한 8번까지 해봤으나 아무런 문제가 없었습니다. 테스트 케이스 개수를 1000개 직접 해보진 못했지만 아마 별다른 오류 없을 걸로 보이고요.... 대체 어디가 잘못된 걸까요?ㅠㅠ

mckkk119   1년 전

입력

3

5 ABC

3 \

7 \

출력

AAAAABBBBBCCCCC

\\\CCC

\\\\\\\CCCCCCC

역슬래시(\)의 처리 과정에 뭔가 문제가 있는 것 같습니다.

asd0014a   1년 전

다음과 같이 char S[21]을 첫번째 for문 안으로 넣어서 해당 문제는 해결했습니다. 근데 그럼에도 아직 백준에서는 틀렸다고 뜨네요 ㅠㅠ.... 뭐가 문제일까요?

pill27211   1년 전

15행 반복문에서 항상 S의 최대 크기만큼 루프를 돌도록 설정하시면, 정해진 답 이외의 출력값이 생길 수 있습니다.
간단하게 예를 들면

2 ABC 에서

"AABBCC"

"AABBCC              "

의 차이입니다. 따라서, 매 사이클마다 입력되는 문자열의 길이만큼만 루프를 돌도록 설정해 주셔야 합니다.

추가로 gets()는 보안상의 문제로 C표준상에서 지워진지 오래입니다.

다만 몇몇 환경에서 컴파일 되는 이유는 이전 버전과의 호환성을 위해 라이브러리엔 남아있기 때문이지요.

따라서 웬만하면 다른 입력 함수를 사용 하시는 게 바람직합니다. 그리고 C언어에선 잊지 말고 종료 코드(return 0;)를 삽입해 주세요.

asd0014a   1년 전

감사합니다! 덕분에 문제를 해결할 수 있었습니다 ㅎㅎ

근데 혹시 질문 하나만 더 드려도 될까요? gets()가 보안상의 문제로 지양하는 게 좋다 하셔서 gets_s를 사용했는데, 다음과 같이 gets_s를 사용하면 백준에서 'gets_s 함수에 대한 내용이 없다'는 식으로 컴파일 에러가 나옵니다. 비주얼 스튜디오에서는 정상적으로 처리가 되고요... 찾아보니까 C11부터는 gets_s가 표준함수라고 나와 있던데, 이는 단순한 백준 측의 오류일까요? 제가 놓친 부분이 있나 싶어 질문 드립니다 ㅠㅠ

pill27211   1년 전

gets_s()도 표준이라고 하긴 하는데 아마 확장 함수라,, 컴파일러 환경별로 다를 거에요. 백준 채점 서버에서 사용하는 컴파일러에선 지원하지 않는 것으로 알고 있습니다.(사용 하시려면 매크로 정의가 필요해 보이는데 그냥 행 단위로 입력 받고자 할 땐 fgets() 사용이 무난해 보이긴 하네요)

https://www.acmicpc.net/blog/v...

도 한 번 읽어 보시면 좋을 것 같아요.

참고로 MS의 비쥬얼 스튜디오는 오히려 표준안(ANSI)을 따르지 않는 것으로 유명합니다.(배열 크기 변수 할당을 지원하지 않는 것이 대표적인 예시지요) gets뿐만 아니라 여러 세팅, 라이브러리, 경고 수준 등 컴파일러 별로 차이가 천차만별입니다.

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