[ BOJ / C++ ] 2477번 참외밭

황승환·2021년 9월 4일
0

C++

목록 보기
45/65

이번 문제는 입력의 패턴을 읽어 해결하는 문제였다. 처음에는 가로와 세로에 대한 최댓값과 최솟값을 구해서 해결하려 했다. xcode에서는 정상적으로 동작했지만 백준 채점은 오답처리 되었고, 다른 방법으로 해결하였다.

  • 기본적인 틀은 큰 직사각형을 구한 뒤 파여져있는 작은 직사각형을 빼는 것이다.
  • 변이 6개이므로 6만큼 for문을 반복하며 다음으로 입력된 변과 현재 변을 곱한다. 가로 세로 번갈아가며 입력되므로 가로x가로나 세로x세로의 경우는 발생하지 않는다.
  • 곱한 값 중 가장 큰 값을 저장하고, (i+3)%6번째 변과 (i+4)%6번째 변을 곱한 값을 가장 큰 값에서 빼준다. (i+3)%6와 (i+4)%6는 현재 인덱스가 큰 가로 세로일 경우일 때, 작은 가로 세로가 된다.
  • 마지막으로 k를 곱해준다.
#include <iostream>
#include <vector>
using namespace std;

int k;
pair<int, int> line[6];
int width=1;
int result=0;

void Input(){
    cin>>k;
    for(int i=0; i<6; i++){
        cin>>line[i].first>>line[i].second;
    }
}

int Solution(){
    for (int i=0; i<6; i++){
        int cur=line[i].second*line[(i+1)%6].second;
        if(width==1||cur>width){
            width=cur;
            result=(width-line[(i+3)%6].second*line[(i+4)%6].second)*k;
        }
    }
    return result;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
    Input();
    cout<<Solution()<<endl;
    return 0;
}

첫번째 방법으로 해결이 되지 않아 머리도 식힐겸 운동을 다녀와서 다시 해결하였다.

profile
꾸준함을 꿈꾸는 SW 전공 학부생의 개발 일기

0개의 댓글