1. Reverse 명령이 들어온다고 진짜로 배열의 모든 원소를 뒤집으면 절대로 안 됩니다. N개의 원소의 순서를 정말로 바꾸면 당연히 그 원소 수만큼 시간이 걸리고, 그걸 최대 10만 번 수행해야 하는 문제의 경우, 100억번의 연산이 수행됩니다. Reverse 명령의 핵심은 실제로 원소를 뒤집지 않고도 뒤집힌 것과 같은 효과를 내도록 구현하는 것입니다. C++의 std::reverse(), Python의 a[::-1] 역시 마찬가지로 사용해서는 안 됩니다.
  2. Delete 명령에 대해서 보통 배열의 맨 앞 원소를 무작정 지워서는 안 됩니다. C++의 vector::erase(), Java의 ArrayList.remove(), Python의 list.pop() 등으로 배열의 첫 번째 원소를 지울 시, 그 뒤에 있는 모든 원소들을 전부 한 칸씩 앞으로 당겨오게 되므로, 그 시간 역시 원소의 수에 비례하여 소요됩니다. 라이브러리 함수는 호출만 하면 N개의 원소를 기적같이 O(1)에 처리해주는 마법사가 아닙니다. 저렇게 원소를 당겨오는 작업 없이도 D의 기능을 구현할 수 있어야 합니다.
  3. 출력형식에 유의해야 합니다. 빈 배열은 []로 출력하는지, 아무것도 출력하지 않거나, error를 출력하거나, 무조건 원소를 하나 출력해도 괜찮은건지 확인하고 print해야 합니다.
  4. 테스트 케이스마다 초기화가 잘 됐는지 확인하세요. 그리고 매 케이스마다 개행 문자를 항상 출력하는지 확인하세요.
  5. (Python제외) 입력받는 문자열의 길이를 확인하고, 입력 문자 배열 크기를 잘 설정하세요.
  6. Index를 확인하세요. 처음 배열의 상태로 빈 배열이 주어지는 경우를 조심하세요. 수가 무조건 하나 이상 있다고 가정하고 코드를 작성하면 이런 경우를 제대로 처리하지 못할 수 있습니다.
  7. 조건문 안에 strlen(str) 를 절대로 넣지 마세요. strlen은 문자열의 처음부터 널 문자가 나올 때까지 한 글자씩 확인하므로, 반복문을 한 바퀴 돌 때마다 문자열의 길이만큼의 시간이 걸립니다.
  8. 명령의 순서를 유의하세요. 문제가 여러 명령을 내릴 때 (Reverse / Delete 등) 명령의 개수만 세서 처리하게 되면 올바르지 않은 처리가 될 수 있습니다. 순서에 따라 결과가 달라지기 때문입니다. 갯수로 처리가능한 명령인지 반례를 들어보고 / 시뮬레이션을 해보고 / Debug값을 확인하세요.
  9. 배열에 들어있는 수는 최대 100입니다. 무조건 한 글자로 가정하고 구현하면 안 됩니다. 참고로, 예제에도 두자리의 수가 하나 등장하지만 어차피 지워지는 원소이기 때문에 잘 나오는 것처럼 보일 수도 있으므로 실제로 두 자릿수를 정확하게 출력하는지 직접 예시를 만들어 출력해보아야 합니다. 대표적인 실수로, 답을 통째로 문자열로 저장해놓고 R 명령시 그대로 뒤집는 것이 있습니다. 이렇게 하면 각 수의 자릿수까지 잘못 뒤집어지게 되는 불상사가 발생합니다.
  10. 입출력 양식은 공백의 유무까지 정확하게 고려해야 합니다. 입력시 공백이 있는 데이터를 받을때와 없는 데이터를 받아 나누어야 할때를 구분하고, 출력시 공백 / 콤마 / 공백이 없는경우(혹은 공백과 콤마 동시에) 를 구분하여 출력하여야 합니다. 입력데이터에 공백이 없는데 공백으로 나누어 입력을 받거나, 출력할 때 임의로 공백을 삽입해서 출력하면 안 됩니다. 대표적인 예시로, Python에서 print(list)를 하면 원소들 사이에 [1, 2, 3, 4…] 와 같은 출력을 가지고, for문 순회하며 print(list[i],end=’’, sep=’,’)를 하면 1,2,3,4… 와 같이 출력되게 됩니다

참고자료