
최댓값 문제네요.
이번 풀이는 실패 코드도 포함되어있으니 정답을 보고싶으신 분들은 앞 내용은 스킵해주시길 바랍니다.
그럼 시작하겠습니다.
첫 번째 시도)
간단해보여서 바로 시도했습니다.

틀렸다고 떠서 굉장히 당황했습니다.
우선 제가 시도한 방법을 설명드리자면 최댓값을 우선 임의의 값으로 대입합니다.
그 이후에 배열을 돌아가며 더 큰 숫자가 나오면 초기화하는 방법으로 하였습니다.
방법에는 문제가 없다고 여겨서 출력 부분을 자세히 보니 이곳에 틀린 점이 있었습니다.

줄 바꿈을 안 했던 것이 패착이었습니다.
그래서 바로 고쳐주고 다시 시도하였습니다.
두 번째 시도)

또 틀렸다고 떠서 굉장히 당황했습니다.
여기서 한 5분간 머리를 싸맸었습니다.
하지만 이번에도 문제에 답이 있었습니다.

몇 번째 수인지 출력한다에서 틀렸던 것입니다.
제가 한 것은 index를 출력시킨거라 여기에 +1을 해주면 된다고 생각하여 바로 수정하고 시도하였습니다.
세 번째 시도)

이번에는 정말 도저히 모르겠어서 구글링을 했습니다.

출처 : https://st-lab.tistory.com/268
여기서 제 코드와 다른 점을 찾아보니 이분은 max값을 -1로 정하셨더라구요.
다시 제 코드를 복기해보니 제 코드에서는 다른 경우에는 정답이 나왔지만 단 한 경우에서는 에러가 나더라구요.
바로 arr[0]의 값이 가장 클 때 였습니다.
이러면 조건문이 false로 되어서 max값은 정답이겠지만 index는 값이 없는 상태라 오류가 나던 것이었습니다.
그래서 max 값을 -1로 고쳐주고 다시 시도해봤습니다.
정답)

드디어 맞았습니다.
거의 이 문제에서만 1시간정도 쓴 것 같은데 어쨌든 기뻤습니다.
하지만 이렇게 끝내기는 아쉬워서 다른 방법도 시도해봤습니다.
간단히 추려보자면
- 1. 배열 사용 X
- 2. Vector 사용
허나 Vector는 배열과 큰 차이점이 없기 때문에 1번만 보여드리도록 하겠습니다.
다른 방법)
아까 코드와 차이점이라면 배열로 숫자를 저장하지 않고 입력하는 동시에 max값과 대조하는 것 정도입니다.
추가)
다른 방법들을 보니 cin.ignore()을 사용하더라구요.
궁금해서 찾아본 내용들도 첨부해봅니다.
cin()
cin는 표준 입력 버퍼에서 공백 혹은 개행문자 이전까지의 값만 받아들입니다.
만일 연산자를 사용한다면 일부 문자만 입력된다는 문제점이 있어서 나온 것이 cin.getline()입니다.
getline
getline() 함수는 2가지로 나뉩니다.
<istream> 의 cin.getline()
<string> 의 getline()
cin.getline()부터 설명하자면
char 형의 문자열을 받을 수 있습니다.
마지막 문자는 자동으로 \n으로 변합니다. *정하지 않았을 경우에만
getline()은 지정한 구분자를 만날 때까지 string 객체에 저장하는 형식입니다.
이해하기 어려울 수 있으니 기초 구성만 보여드리자면
#include<string>
getline(입력, string 객체, 구분자(delimiter));
하지만 가끔 실행 시 일부 문자만 입력되는 경우가 있는데
이유는 표준 입력 버퍼에 \n이 남아있는데 이게 구분자로 해당되어 그런 것입니다.
그러므로 입력받은 이후 cin.ignore()로 버퍼를 비워주면 이런 경우를 예방할 수 있겠죠.
이것이 cin.ignore()의 쓰임입니다.
제 설명에 부족하거나 틀린 점이 있다면 댓글로 달아주세요. 수정하겠습니다.
'백준' 카테고리의 다른 글
백준 2941 c++ 풀이 (0) | 2024.07.09 |
---|---|
백준 9086 c++/python 풀이 (0) | 2024.03.30 |
백준 5597 c++ 풀이 (0) | 2024.03.16 |
백준 10813 c++ 풀이 (0) | 2024.03.06 |
백준 10810 c++ 풀이 (1) | 2024.02.21 |