measurezero   2년 전

1. 4773번 한국어 번역 지문에서 "로마 숫자 표기법은 2608번에 잘 설명되어 있다."라고 서술하고 있으나, 실제로는 두 문제에서의 로마숫자 표기법에 차이가 있습니다.

구체적으로는 M의 사용 횟수에 대한 조건이 다릅니다. 2608번에서는 "V, L, D는 한 번만 사용할 수 있고 I, X, C, M은 연속해서 세 번까지만 사용할 수 있다."라고 서술하고 있으나 4773번의 원문에서는 "Except for M, do not add more than three of the same letters together." 이라고 서술하고 있습니다. 이러한 점은 4773번 문제의 지문에 등장하는 이 문제에서의 4999의 로마숫자 표기법인 MMMMCMXCIX를 통해서도 다시 한 번 확인할 수 있습니다.

2608번 문제에 다음 글이 있었던 점을 고려하여, 4773번 문제에는 내용이 거의 같더라도 규칙을 다시 작성해야할 것 같다고 생각했습니다.

따라서, 4773번의 문제의 한국어 지문에 2608번의 로마숫자를 만드는 규칙을 그대로 복사하되, 2번 규칙을 다음으로 수정하는 것을 제안합니다. 둘의 차이점은 M에 대한 제약조건의 유무입니다.

V, L, D는 한 번만 사용할 수 있고 I, X, C는 연속해서 세 번까지만 사용할 수 있다. 예를 들어 VV나 LXIIII 와 같은 수는 없다. 그리고 같은 숫자가 반복되면 그 값은 모든 숫자의 값을 더한 값이 된다. 예를 들어 XXX = 10 + 10 + 10 = 30 이 되고, CCLIII = 100 + 100 + 50 + 1 + 1 + 1 = 253 이 된다.

2. 문제에 계산 중간결과값에 대한 제약조건이 없습니다.

어떠한 제약조건도 존재하지 않으면 C++ 등의 언어에서 큰 정수의 연산 등을 구현하지 않은 경우 몇번의 곱셈 연산으로 빠르게 오버플로우를 일으켜 오답을 내는 데이터를 쉽게 만들 수 있습니다.

그러나 assert문으로 확인한 결과(제출번호 29494995) 테스트케이스에서의 모든 계산 중간결과값의 절댓값이 1000을 넘는 경우가 존재하지 않습니다. 따라서, 이 문제의 현존하는 데이터의 강도로 미루어볼 때 이 문제의 정해는 위와 같은 상황을 해결할 것을 상정하지 않은 것이라 생각됩니다.

따라서, 다음 조건을 추가할 것을 제안합니다:

모든 사칙 연산자의 입력은 그 수행으로 얻어지는 결과값의 절댓값이 1,000,000,000 을 넘지 않게 주어진다.

startlink   2년 전

수정했습니다.

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