2 minute read

💻실습

19. 각도기

  • 📝문제 설명

    • 각에서 0도 초과 90도 미만은 예각, 90도는 직각, 90도 초과 180도 미만은 둔각 180도는 평각으로 분류합니다.
    • 각 angle이 매개변수로 주어질 때 예각일 때 1, 직각일 때 2, 둔각일 때 3, 평각일 때 4를 return하도록 solution 함수를 완성해주세요.
          예각 : 0 < angle < 90
          직각 : angle = 90
          둔각 : 90 < angle < 180
          평각 : angle = 180
    


  • ⚠️제한사항

    • 0 < angle ≤ 180
    • angle은 정수입니다.


  • 📜입출력 예

    angle result
    70 1
    91 3
    180 4
    • 입출력 예 #1 : angle이 70이므로 예각입니다. 따라서 1을 return합니다.
    • 입출력 예 #2 : angle이 91이므로 둔각입니다. 따라서 3을 return합니다.
    • 입출력 예 #3 : angle이 180이므로 평각입니다. 따라서 4를 return합니다.


  • ✏️코드
    #include <string>
    #include <vector>

    using namespace std;

    int solution(int angle) {

        if(angle == 180)
            return 4;
        
        else if(angle > 90)
            return 3;
       
        else if(angle == 90)
            return 2;
       
        else return 1;

    }

19. 최빈값 구하기

  • 📝문제 설명

    • 최빈값은 주어진 값 중에서 가장 자주 나오는 값을 의미합니다.
    • 정수 배열 array가 매개변수로 주어질 때, 최빈값을 return 하도록 solution 함수를 완성해보세요.
    • 최빈값이 여러 개면 -1을 return 합니다.


  • ⚠️제한사항
    • 0 < array의 길이 < 100
    • 0 ≤ array의 원소 < 1000


  • 📜입출력 예
array result
[1, 2, 3, 3, 3, 4] 3
[1, 1, 2, 2] -1
[1] 1
  • 입출력 예 #1 : [1, 2, 3, 3, 3, 4]에서 1은 1개 2는 1개 3은 3개 4는 1개로 최빈값은 3입니다.
  • 입출력 예 #2 : [1, 1, 2, 2]에서 1은 2개 2는 2개로 최빈값이 1, 2입니다. 최빈값이 여러 개이므로 -1을 return 합니다.
  • 입출력 예 #3 : [1]에는 1만 있으므로 최빈값은 1입니다.


  • ✏️코드
    #include <string>
    #include <vector>

    using namespace std;

    int solution(vector<int> array) {
        vector<int> count;
        
        for(int i = 0; i < 1000; i++){
            count.push_back(0);
        }
        
        for(int i = 0; i < array.size(); i++){
            count[array[i]]++;
        }
        
        // 제일 count가 큰 애의 array값이 최빈값
        int max = 0;
        int mode = 0;
        int cnt = 1;
        for(int i = 0; i < 1000; i++){
            if(max <= count[i]){
                if(max == count[i])     // 빈도가 같은 경우
                    cnt++;
                else{
                    cnt = 1;
                }
                max = count[i];
                mode = i;
            }
        }
        
        if(cnt > 1)
            return -1;
        
        return mode;
    }
  • Professor Solution
    #include <string>
    #include <vector>
    #include <algorithm>

    using namespace std;

    int solution(vector<int> array)
    {
        int answer = 0;
        int count[1000];

        int mode;
        int modeCount = -1;
        bool duplicate = false;

        // 0으로 초기화
        for (int i = 0; i < 1000; i++)
            count[i] = 0;
        // array에 있는 숫자를 인덱스로 간주하여 그 숫자가 나올때마다 ++을 하는 형식
        for (int i = 0; i < array.size(); i++)
            count[array[i]]++;

        for (int i = 0; i < 1000; i++)
        {
            // max 구하기
            if (count[i] > modeCount)
            {
                mode = i;
                modeCount = count[i];
                duplicate = false; // 동점자인지 아닌지
            }
            else if (count[i] == modeCount)
            {
                duplicate = true;
            }
        }
        if (!duplicate)
            answer = mode;
        else
            answer = -1;

        return answer;
    }