mjk870   1년 전

아 계속 봐도 안보여서 결국 질문을 올리게 되었습니다... 뭐가 어디가 문제인지 예제는 다 맞는데 왜 이런지 잘 모르겠네요...

bamgoesn   1년 전

질문을 올리실 땐 반드시 제출 결과가 무엇인지 명시해주세요. 그리고, 반드시 그 제출 결과가 나온 코드를 올려주세요.

위 코드를 그대로 제출해보니 시간 초과가 나옵니다. 반면에 제출하신 내역을 보니 시간 초과도 있고 틀렸습니다도 있는 것 같네요. 반례가 궁금하신 코드는 아마 그 틀렸습니다가 나온 코드일 텐데, 왜 시간 초과가 나온 코드를 올려주셨나요? 코드 공개 여부 설정때문에 틀렸습니다를 받은 코드를 확인해볼 수는 없어서 반례를 제시해드리기 어렵습니다. 위 코드는 맞거든요.

이 문제는 시간제한이 0.5초에 파이썬 시간 보너스도 없는데 (추가 시간 없음) 명령의 수가 10000개로 파이썬이 처리하기는 좀 버겁습니다. 이 때문에 기본 제공 input() 함수로 입력을 처리하면 시간 초과가 날 수 있습니다. 아래와 같이 코드 최상단에서 input 함수를 재정의하여 빠른 입력을 적용해주면 입력을 빠르게 받을 수 있고, 위 코드는 정답 판정을 받게 됩니다.

ㅡㅡㅡㅡㅡ

추가로 위 코드에 대해 몇 가지 팁을 드리자면, d의 마지막 원소를 가져올 때 d[len(d)-1] 대신 d[-1]를 써도 됩니다. 파이썬은 음수 인덱싱은 지원하며, d[-1]은 마지막 원소, d[-2]는 마지막에서 두 번재 원소 이와 같은 방식으로 작동합니다.

리스트에 대해 pop 메서드를 실행하면, 제거된 원소가 그 메서드의 반환값이 됩니다. 따라서 pop 명령어를 처리할 때 print(d.pop())만 해줘도 충분합니다.

문자열은 슬라이싱이 가능합니다. 즉, 문자열의 i번째 문자부터 j번째 문자까지 잘라낸다거나, i번째 문자 이후의 부분을 잘라낸다거나 하는 것이 가능합니다. 이를 활용하면 push 명령어를 처리할 때 b 문자열을 직접 만들어나가지 않고, b = comm[5:]; d.append(int(b))와 같이 코드를 바꿀 수 있습니다.

mjk870   1년 전

아 죄송합니다. 주피터에서 사용하던걸 그대로 가져왔네요. 답답한 나머지 급하게 질문을 쓴것이 징징 된것이 되어버렸네요 감사합니다.

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