ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [C++] 과제 위쪽 둘레 구하기
    프로그래밍 언어 😵‍💫/C++ 2023. 5. 16. 00:25

     

    //입력 사각형 개수
    //사각형 가로와 세로 길이
    
    //출력
    //최대 위쪽 둘레
    //1. 가로 길게 세로 짧게
    //2. 세로 길게 가로 짧게
    //3. 가로 길게 세로 짧게
    //지그재그로 !
    
    
    #include <iostream>
    #include <stdio.h>
    #include <vector>
    using namespace std;
    
    
    
    int main() {
        int n; //사각형 갯수
        cin >> n;
        int arry[][2] = { { 0,0 } }; //0으로 초기화
        int result=0;
        int temp;
        int row;
        vector <int> col;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2; j++) {
                cin >> arry[i][j];
            }
            if (arry[i][0] > arry[i][1]) { // 첫 번째 원소가 더 크면 교환
                temp = arry[i][0];
                arry[i][0] = arry[i][1];
                arry[i][1] = temp;
            }
    
            if (i % 2 != 0) {
                result += arry[i][0];
                col.push_back(arry[i][1]);
            }
            else {
                result += arry[i][1];
                col.push_back(arry[i][0]);
    
            }
        }
        // 배열의 배열, 각 사각형의 길이 정렬했음(내림차순) {작은값,큰값}
        //1. 배열의 홀수 인덱스 : 작은값 arry[i][0] 세로, 큰값arry[i][1] 가로
        //2. 배열의 짝수 인덱스 : 작은값 arry[i][1] 가로 ,큰값arry[i][0] 세로
        //
       
        //3. 홀수 인덱스의 가로 + 짝수 인덱스의 가로
        //4. 짝수 인덱스의 세로값 - 홀수 인덱스(짝수 -1)의 세로값
        //3과 4의 합
        
        cout << result << "------" << endl;
    
        for (int i = 0; i < col.size()-1; i ++) {
            int a = abs(col[i+1]-col[i]);
            result += a;
        }
    
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2; j++) {
                cout << arry[i][j] << " ";
            }
            cout << endl;
        }
    
       // result += row;
        cout << result << endl;
    
    }

    수정 전

    아마 기둥의 왼쪽 값만 구했나..? 마지막 값을 안구했나? 아무튼 뭔가 빠져서...

    //입력 사각형 개수 
    //사각형 가로와 세로 길이 
    
    //출력 
    //최대 위쪽 둘레
    //1. 가로 길게 세로 짧게 
    //2. 세로 길게 가로 짧게 
    //3. 가로 길게 세로 짧게 
    //지그재그로 !
    
    
    #include <iostream>
    #include <stdio.h>
    #include <vector>
    using namespace std;
    
    
    
    int main() {
        int n; //사각형 갯수 
        cin >> n;
        int arry[][2] = { { 0,0 } }; //0으로 초기화 
        int result = 0;
        int temp;
        int row;
        vector <int> col;
        vector<int> col_result;
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2; j++) {
                cin >> arry[i][j];
            }
            if (arry[i][0] > arry[i][1]) { // 첫 번째 원소가 더 크면 교환
                temp = arry[i][0];
                arry[i][0] = arry[i][1];
                arry[i][1] = temp;
            }
    
            if (i % 2 != 0) {
                result += arry[i][0];
                col.push_back(arry[i][1]);
            }
            else {
                result += arry[i][1];
                col.push_back(arry[i][0]);
    
            }
        }
        // 배열의 배열, 각 사각형의 길이 정렬했음(내림차순) {작은값,큰값}
        //1. 배열의 홀수 인덱스 : 작은값 arry[i][0] 세로, 큰값arry[i][1] 가로 
        //2. 배열의 짝수 인덱스 : 작은값 arry[i][1] 가로 ,큰값arry[i][0] 세로 
        // 
    
        //3. 홀수 인덱스의 가로 + 짝수 인덱스의 가로 
        //4. 짝수 인덱스의 세로값 - 홀수 인덱스(짝수 -1)의 세로값 
        //3과 4의 합 
    
        for (int i = 1; i <col.size(); i += 2) {
            col_result.push_back((col[i] - col[i - 1])+(col[i]-col[i+1]));
            if (i == col.size() && i % 2 !=0) {
                col_result.push_back(col[i - 1]);
            }
        }
        for(int i = 0; i < col_result.size(); i++) {
            result += col_result.at(i);
        }
    
        for (int i = 0; i < n; i++) {
            for (int j = 0; j < 2; j++) {
                cout << arry[i][j] << " ";
            }
            cout << endl;
        }
    
        // result += row;
        cout << result << endl;
    
    }

     

    여기에 가로가 긴 경우 반대로 적었어야 했는데.. 지금도 그렇고.. 코드를 어떻게 짰던건지 기억이 안나서 그냥 제출해버림.. 

    교훈 !! 코드는 한번에 짜버리자... 나중에 추가하려면 내가 어떻게 이런생각을 했지?? 싶으니....

     

     

Diseñada por Tistory.