por1329   2년 전

주석도 써보고 했는데

알고리즘에서 문제가 있었던 것 같아요.

근데 해결법을 찾아봐도 이해가 잘 안가네요.

명확한 답변 부탁드립니다!!

euphoric_n   2년 전

11번줄, 18번줄에서 int max가 이중 선언되고 있으며, 이 문제의 출력은 최댓값 뿐만 아니라 최댓값의 위치까지 출력해야합니다.

다음과 같은 입력을 가정하겠습니다. (문제의 예제와 같습니다.)

3
29
38
12
57
74
40
85
61

문제에서 최댓값과 그 위치를 요구하기 때문에 두 변수를 먼저 max, index로 선언하겠습니다.

변수 max는 충분히 작은 값으로 초기화하여 첫번째 입력값을 받았을 때 max가 갱신되도록 합니다. 여기서는 0으로 초기화 하겠습니다.

그리고 9번 루프를 돌면서 자연수를 입력받습니다.

첫번째로 3을 입력받았고 이는 max값인 0보다 크기 때문에 최댓값의 갱신이 필요합니다.

max에 3을 저장하고 index에는 첫번째 루프이므로 1을 저장합니다.

두번째로 29를 입력받았고 이는 max값인 3보다 크기 때문에 다시 갱신해줍니다. (max = 29, index = 2)

세번째 역시 갱신해줍니다. (max = 38, index = 3)

네번째에는 12를 입력받았고 이는 max 38보다 작기때문에 갱신하지 않고 통과합니다.

이를 반복하면 반복문이 끝났을 때 두 변수는 max = 85, index = 8의 값을 가지고 있습니다.

요약하면 다음과 같습니다.

1. max, index 변수 선언하고 max는 입력 범위(1~99)보다 작은 값으로 초기화

2. 9번 반복문을 돌면서 입력받은 값이 기존 max 값보다 크면 max, index를 새 값으로 갱신

3. 최댓값이 가장 먼저 등장하는 위치를 찾아야하므로 입력받은 값이 max와 같을 때는 갱신하면 안됨

por1329   2년 전

감사합니다.

노트에 정리하면서 하나 둘씩 정리해보니 중복표현도 그렇고 문제도 잘못봐서 고민없이 질문을 했다는게 다시 한번 느껴지네요...

그럼에도 명확하고 정확한 답변 감사합니다 ^^

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