자꾸미뤄지다가 안풀리니까 아예 공부를 미루어 버렸다.
2562번 분명히 에디터상에서는 맞았지만 백준에 제출할때는 틀렸다고 나와서 검색을 해버렸다.
#include
int main(){
int Snum[10] = {0,}; //충분한 공간 할당
int Max = 0;
int MaxFlag =0;
for(int i = 0; i< 9; i++){
scanf("%d",&Snum[i]);
if(Snum[i]>99){
while(Snum[i]>99){
scanf("%d",&Snum[i]);
}
}
}
Max = Snum[0]; //Snum[0]으로 하는 이유는 임의의 상수나 0으로 설정시 배열의 값고 비교시 문제가 있기때문
for(int i = 0; i<9; i++){
if(Max<Snum[i]){
Max = Snum[i];
MaxFlag = i+1;
}
}
printf("%d\n",Max);
printf("%d",MaxFlag);
}
제출전 코드가 이거였는데 여기서 int MaxFlag =0; 를 0이 아니라 1로 초기화를 해야지 맞았다고 한다
그중에 답변 내용에 이런글이 있었다
댓값을 저장하기 위해 꼭 0으로 초기화할 필요는 없습니다. 그 이유는, 0으로 초기화한 뒤 첫 번째 값을 입력받으면 어차피 그 값으로 바로 갱신이 될 테니, 처음부터 첫 번째 값을 받아서 시작하는 것과 다를 것이 없기 때문이죠. 그리고 루프도 8번만 도는 것이 의도된 코드입니다. 첫 번째 값은 루프 전에 이미 입력을 받았으니, 이후 입력받을 값은 8개밖에 없습니다. 마지막으로 i가 먼저 증가한 뒤 place를 갱신하는 것도 마찬가지로 이미 첫 번째 값을 입력받고 시작했기 때문에 증가가 된 뒤에 처리를 하는 것이 맞는 것입니다.
답변을 할 때 내가 맞다고 생각하는 풀이를 기준으로 설명하기 전에, 먼저 질문자의 코드의 의도가 무엇인지를 파악하고, 그 로직이 올바른지를 판단해내는 것이 중요합니다.
그렇다 밑에 코드에서 만약 MaxFlag가 1인 경우를 생각하지 못했던것이다.
이걸로 인해 나는 한 단계더 성장해버렸다.