본문 바로가기

카테고리 없음

백준2562 최대값 구하기

자꾸미뤄지다가 안풀리니까 아예 공부를 미루어 버렸다.

 

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인 경우를 생각하지 못했던것이다.

 

이걸로 인해 나는 한 단계더 성장해버렸다.