G Y U L O G

백준 알고리즘 규코드
백준 알고리즘 규코드

 

문제

9개의 서로 다른 자연수가 주어질 때, 이들 중 최댓값을 찾고 그 최댓값이 몇 번째 수인지를 구하는 프로그램을 작성하시오.
예를 들어, 서로 다른 9개의 자연수
3, 29, 38, 12, 57, 74, 40, 85, 61
이 주어지면, 이들 중 최댓값은 85이고, 이 값은 8번째 수이다.

입력

첫 째 줄부터 아홉 번째 줄까지 한 줄에 하나의 자연수가 주어진다. 주어지는 자연수는 100 보다 작다.

출력

첫째 줄에 최댓값을 출력하고, 둘째 줄에 최댓값이 몇 번째 수인지를 출력한다.

예제 입력

3
29
38
12
57
74
40
85
61

예제 출력

85
8

규코드

#include <iostream>

int main() {
    //input
    int input[9]= {0};

    for(int i =0; i < 9; i++){
        std::cin>>input[i];
    }
    
    //processing - output max, max's index
    int max = input[0];
    int idx = 0;

    for (int j = 1; j < 9; j++) {
        if (max < input[j]){
            max = input[j];
            idx = j;
        }
    }
	
    //output
    std::cout<<max<<"\n"
             <<idx+1;

    return 0;
}

최댓값을 찾는 문제는 코딩 기초를 익힐 때 자주 나옵니다.

 

제가 이번 문제에서 사용한 방법은 버블 정렬의 일부입니다.

 

버블 정렬은 바로 옆과 현재 수를 비교하여 큰 수를 뒤로보내는 정렬입니다. 

 

아래 gif를 봐주세요

버블정렬

코딩 방법은 간단합니다. 그냥 첫 값을 고정시켜 두고 비교/교체를 반복하면 되는 것이죠.

 

제가 이번 문제를 포스팅한 이유는 이 문제 자체라기 보다 위 코드에 적은 input 루프에 있습니다.

for(int i =0; i < 9; i++){
        std::cin>>input[i];
    }

이 단순한 for문을 바꿔볼게요.

for(int & i : input){
        std::cin>>i;
    }

참조 연산자를 이용한 것으로 보입니다.

 

input문자열 크기를 loop size로 받고 loop index 값인 i를 넣습니다.

for(int &idx : array){ //<- array[N]이면 loopsize N
	std::cin>>idx;
}

하나 더 추가하자면 cin 함수는 공백문자로 값의 차이를 구분합니다.

 

문제가 좀 더 엄격했으면 줄바꿈의 경우만 받아들이게 했을 수 도 있지만 다행히 그정도로 엄격하진 않았습니다.

"댓글, 공감 버튼 한 번씩 누르고 가주시면 큰 힘이 됩니다"

공유하기

facebook twitter kakaoTalk kakaostory naver band