일단 틀리는 원인은 d배열이 10만 넘어가기 때문인것 같네요.
예시 주어진거만 봐도 입력크기는 8인데 출력은 8보단 많이 출력해야하니까요.
그냥 d를 100만으로 잡아보니까 통과되네용.. c++에서 왜 되는지는 잘모르겠네요... 안되야 할거같은데
1874번 - 스택 수열
일단 틀리는 원인은 d배열이 10만 넘어가기 때문인것 같네요.
예시 주어진거만 봐도 입력크기는 8인데 출력은 8보단 많이 출력해야하니까요.
그냥 d를 100만으로 잡아보니까 통과되네용.. c++에서 왜 되는지는 잘모르겠네요... 안되야 할거같은데
배열 크기 문제가 맞고요
밑에 소스를 돌려보시면 아시겠지만
오류가 나지 않고 제대로 출력이 나옵니다.
배열이 메모리에 연속된 공간을 사용하기 떄문인데
int a[2]라고 선언한건 "이 배열은 2칸의 메모리를 사용하겠다"는거지만
사실 operator[] 를 사용할 땐 해당 배열의 크기가 몇인지 검사를 하지 않습니다.
한마디로 아래 코드에서 a[3]을 사용하면
a에서 3칸 더 간 메모리에 접근하는 겁니다.
이 문제는 수의 개수가 10만이면 정답의 개수는 최대 20만입니다. (한 숫자당 +하나 -하나 나온다고 생각해보세요)
그래서 d배열을 저렇게 선언하셨어도, d부터 d+20만까지의 메모리가 사용이 가능하다면 AC가 뜰겁니다.
아무래도 C랑 C++을 컴파일할 때 메모리를 잡는 부분이 다르거나 해서 C++은 AC가 뜨는 것 같네요.
C를 컴파일 할 땐 d+100001~d+200000까지의 메모리중 어딘가가 이미 사용이 되고있거나 접근이 안되거나 하기때문에 정답이 아니겠죠.
해결방법은 윗분이 말씀하셨듯 d배열을 20만 이상으로 늘리면 됩니다.
댓글을 작성하려면 로그인해야 합니다.
kjho1037 6년 전