pichulia   4년 전

일단 문제에 적힌 조건을 복붙해보면 다음과 같습니다.

  • add x: S에 x를 추가한다. (1 ≤ x ≤ 20) S에 x가 이미 있는 경우에는 연산을 무시한다.
  • remove x: S에서 x를 제거한다. (1 ≤ x ≤ 20) S에 x가 없는 경우에는 연산을 무시한다.
  • check x: S에 x가 있으면 1을, 없으면 0을 출력한다.
  • toggle x: S에 x가 있으면 x를 제거하고, 없으면 x를 추가한다. (1 ≤ x ≤ 20)

보다시피 다른 연산자와는 다르게 check 함수의 입력으로 들어오는 x는 범위가 정해져있지 않습니다.

따라서 현재  주어진 조건에 의하면

아래와같은 입력데이터들도 들어올 수 있고

대부분의 코드들은 이런 데이터에 대해서 처리하지 않았다고 생각됩니다.

check 함수의 조건에 빠진것을 간파했는지 여부를 보는것도 의도된 것이라 생각되는데... 그렇다면 데이터를 추가해주시고,

혹시나. 만에하다. 정말 그럴 확률은 적다고 생각되지만... 이것이 의도한 것이 아니라면 문제 지문에서 check함수에서 대한 x 조건을 추가해야할듯 합니다.

감사합니다.

djm03178   4년 전

저는 단순히 x의 범위를 빠뜨린 것일 가능성이 99% 이상이라고 생각합니다. 애초에 그걸 정하지 않는다는 건 길이가 10^99999999 인 문자열이 들어올 수도 있다는 건데 그러면 절대로 풀 수 없는 문제가 되겠죠.

pichulia   4년 전

메모리 제한이 4MB여서 입력데이터도 4MB 이내라고 생각했었는데 그렇지 않을 수도 있었군요. 제가 놓쳤던 부분인거 같습니다.

그렇다면 "입력데이터의 크기는 3MB를 넘어가지 않음이 보장된다"같은 조건도 추가로 필요하겠네요.

이 부분에 대한 제한사항 추가도 요청합니다.

pichulia   4년 전

사실 반쯤 농담입니다. (반쯤은 진담)

luniro   4년 전

M의 범위가 3백만까지라서 입력데이터가 3MB 이내로는 보장되지 않을 것 같습니다

M이 최대값일 때 모든 연산이 가장 짧은 all로만 구성되어있어도 12MB를 초과하게 됩니다

startlink   4년 전

수정했습니다.

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