hmnit2   4년 전

이게 제 코드인데 왜 안되는 거죠..?

xo294   4년 전

확인해본 결과 3가지 문제점이 있었습니다.

첫번째는 int num = sc.nextInt(); 입니다.
num 변수의 의미는 최댓값을 비교하기 위함일텐데, 이럴 경우에는 num = 0; 으로 초기화 하시는 것이 좋을 것 같습니다.
(문제의 조건에서 9개의 숫자 외에는 입력하라는 조건이 없었습니다.)

두번째는 while문의 조건입니다.  문제의 조건에는 9번까지 출력하라고 했는데,  i를 0부터가 아닌, 1로 시작하셨습니다. 좋은 시도였으나,

while( i < 9)라는 의미는 1, 2, 3, 4, 5, 6, 7, 8 까지 반복 한다는 것을 의미합니다. 따라서 8번만 반복이 됩니다.

세번째는 i의 증감연산입니다.

이때 i의 역할은 증감 연산자의 역할도 있지만, 최댓값의 위치를 저장하는 용도로도 사용됩니다. 그 부분은 잘하셨으나, i는 최댓값의 위치를 저장하기 전에 i를 증가시킵니다.

예를들어 1번째 반복문에서 if문을 진행하기 전에 있는 i로 인해 i는 2가 되고, if문이 진행되었기때문에 조건문 안에서의 i는 2가 됩니다.

아래에 제 코드를 첨부합니다. 이해가 되지 않는 것이 있다면 답글주세요..!

djm03178   4년 전

틀린 곳은 한 글자 뿐입니다. 8번째 줄의 0을 1로만 바꾸면 맞습니다.

@xo294 최댓값을 저장하기 위해 꼭 0으로 초기화할 필요는 없습니다. 그 이유는, 0으로 초기화한 뒤 첫 번째 값을 입력받으면 어차피 그 값으로 바로 갱신이 될 테니, 처음부터 첫 번째 값을 받아서 시작하는 것과 다를 것이 없기 때문이죠. 그리고 루프도 8번만 도는 것이 의도된 코드입니다. 첫 번째 값은 루프 전에 이미 입력을 받았으니, 이후 입력받을 값은 8개밖에 없습니다. 마지막으로 i가 먼저 증가한 뒤 place를 갱신하는 것도 마찬가지로 이미 첫 번째 값을 입력받고 시작했기 때문에 증가가 된 뒤에 처리를 하는 것이 맞는 것입니다.

답변을 할 때 내가 맞다고 생각하는 풀이를 기준으로 설명하기 전에, 먼저 질문자의 코드의 의도가 무엇인지를 파악하고, 그 로직이 올바른지를 판단해내는 것이 중요합니다.

xo294   4년 전

감사합니다. 최근에 이 곳에서 도움을 받아서 저도 도움을 줄 수 있는 부분에서는 도와주고 싶다고 시작하게 되었는데 많이 어렵네요..

제가 초보자때 했을법한 실수를 최대한 풀어서 설명해보려고 여러가지 방법을 제시해봤다고 생각했는데, 더 단순화 시킬 수 있는지는 몰랐습니다.

조금 더 공부해서 좋은 답변 하도록 노력하겠습니다. ㅎㅎ

hmnit2   4년 전

정성스러운 답변 해주셔서 너무너무 감사합니다. 좋은 하루 되시길 바랍니다. 진짜 너무너무 감사합니다 :DD

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