iskim328   4년 전

얼추 값은 잘 나오는거 같은데 체점하면 메모리 초과라고 뜨더라고요.

어떻게 하면  메모리 초과가 안되게 할 수 있을까요(새로운 식을 만드는게 좋나요?).

그리고 저는 값이 잘 나온다고 생각하는데 혹시 반례가 있다면 그것도 지적 부탁드립니다.

반례 뿐만 아니라 더욱 좋은 코딩이 될 수 있다면 어떤 지적도 받겠습니다!!!! 도와주세요!

scvhero   4년 전

입력에 해당하는 값만 출력하는데 그 전까지의 값을 저장할 필요가 없죠

iskim328   4년 전

좋은 지적 감사합니다 scvhero님!

그러면 Array을 그냥 String 으로 대체해서 하면 되겠군요!

scvhero님의 가르침을 듣고 고친 코드입니다.

또 더욱 발전을 위해 지적할 부분이 있다면 지적 부탁드려요!

iskim328   4년 전

윗 코드를 다시 체점을 해보니 시간 초과가 나왔습니다.....

지적 부탁드려요 선생님들!

djm03178   4년 전

"입력에 해당하는 값만 출력하는데 그 전까지의 값을 저장할 필요가 없죠"

이걸 잘 생각해 보세요. 저장할 필요가 없을 뿐 아니라 아예 답을 만들어볼 필요도 없습니다.

djm03178   4년 전

그리고 이 문제는 1부터 하나씩 해보지 않고 더 빠르게 답을 구할 수도 있습니다.

iskim328   4년 전

감사합니다 djm03178님!

1부터 하나씩 해보지 않고 더 빠르게 답을 구할 수도 있다고 하셔서 더욱 생각해보고 이런 코드를 만들었습니다.

컴파일도 답도 맞았는데 그래도 혹시 이상하거나 지적 받을 만한 부분이 있나 궁금합니다!

rlarla97   4년 전

먼저 가장 마지막으로 수정한 코드에서 조언드리겠습니다.

1. Scanner 보다는 BufferedReader 로 입력을 받는 것이 메모리와 시간 모두 단축시킬 수 있습니다.

2. String 으로 굳이 묶지 않고 바로 출력하는 방법이 메모리를 좀 더 아낄 수 있습니다. String s 는 불필요해 보입니다.

3. do-while을 쓰셔도 됩니다만 특별한 상황이 아니면 while을 쓰는 것이 좋을 것 같습니다. 최소한 1번은 실행하느냐 아니냐의 차이는 앞으로의 문제에서 입력에 있어서 극단적인 수(0번 실행) 같은 것을 받을 수도 있기 때문에 예외의 경우를 생각해서라도 while 로 바꾸는게 더 좋을듯 싶습니다.

4. std를 닫아주는거라면 입력이 더이상 없을 경우에 바로 닫아주는 것이 scanner 의 메모리 자원을 반납해주기 때문에 더 효율적으로 메모리를 관리할 수 있습니다.

5. 로직 자체는 잘 짜신 것 같습니다. 다만 작은 부탁이 있다면 질문 올리실 때 변수명을 최대한 다른사람도 읽기 쉽도록 변경해서 올려주시면 더욱 질 좋은 답변을 받으실 수 있을 것 같습니다.

iskim328   4년 전

rlarla97님 정말 좋은 조언 감사합니다. 앞으로도 다른 코딩할때 항상 생각하면서 발전해보겠습니다!

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