210204[algorithm]백준 1813 cpp 풀이

Modyhoon·2021년 2월 4일
0
  • 1813

    풀이

    • 같은 말을 여러번 할 수 있다는 사실을 간과했다.

    • 같은 index가 나올 수 없다는 조건이 있다면

    • 답은 1 아니면 -1이 된다.

      • 그 이유는, 만약 index가 1, 2, 3 이라고 해보자.
      • 그러면 1개의 말이 참이다만 가능하고
      • 나머지 2개의 말이 참이다, 3개의 말이 참이다 라는 말은 절대 불가능하다.
      • 한 인덱스가 참이라면 나머지는 무조건 안되기 때문이다.
    • 그래서 이런 문제는 자연스럽게 중복이 되는지의 여부를 체크해야 한다.

    • 하지만 난 인터넷을 보고 힌트를 얻었다.

    • 문제가 모호하다고 생각했는데, 문제를 자세히 안본 내 잘못이다.

    • 아무튼, 같은 말을 여러번 할 수 있다면 아래 문제의 답은 다음과 같다.

      • 1 2 2 3 3 3 4
      • 답 = 3
      • 답은 1, 2, 3 세 가지가 될 수 있는데 그 중에서 가장 큰 것을 출력해야 하므로 3이다.
    • 즉, index가 몇 번 불렸는지 count를 세면 된다.

    • count를 세서 index와 같으면 vector에 저장한다.

    • 그 후, vector에서 가장 큰값을 출력한다.

    • 사실 위 방법대로 할 필요 없이, 반복문을 큰거부터 작은순으로 돌리면서 출력하고 바로 main함수를 종료시키는 방법이 더 깔끔하다.

    • 아, 풀면서 생긴 문젠데 count는 예약어인가..?

      코드

      #include <iostream>
      
      using namespace std;
      
      int mycount[100000] = {0 ,};
      
      int main(void)
      {
      	int N;
      
      	cin >> N;
      	for (int i = 0; i < N; i++)
      	{
      		int temp;
      		cin >> temp;
      		mycount[temp]++;
      	}
      	for (int i = N; i >= 0; i--)
      	{
      		if (mycount[i] == i)
      		{
      			cout << i << endl;
      			return (0);
      		}
      	}
      	cout << "-1" << endl;
      	return (0);
      }
profile
어제보다 나은 오늘

0개의 댓글