본문 바로가기

_BOJ/_C , C++

codeforces) Goodbye 2020 / A. Bovine Dilemma - c++

반응형

코드포스 goodbye 2020 a번 문제 c++ 풀이이다.

codeforces.com/contest/1466/problem/A

 

Problem - A - Codeforces

 

codeforces.com

문제가 뭐 말이 많은데

x, y 좌표를 그린 다음에

0,1 지점에다가 점을 하나 찍는다. 이게 유일한 높이가 될 것이다.

그 다음 아랫줄에 있는 숫자들이 x,0 좌표인것이다.

 

그래서 예를 들어

4

1 2 4 5 이면

.

 . .  . .

이런식인것이다. 이걸 하나씩 이어서 나눠보다가

이 노트에서 말하는것처럼 모든 케이스 수를 구하면 되는 것인데

솔직히 잘 모르겠고 그냥 각자 삼각형크기를 모두 구한다음에

그니까 모든 삼각형 크기를 계산을 한 다음에

겹치는것을 빼고 뭐까지 나오나 세보면 될 것 같았다.

c++에  set container라고 있는데

key값은 중복을 허용 하지 않는다.는 특징이 있다.

우리가 상세한 값이 필요한것이 아니기 때문에

그냥

set<float> result; 라고 지정해두었다.float 부분은 자료형이니까 필요한대로 넣고result 저건 변수명이니까 아무거나 가져다 써도 괜찮다.blockdmask.tistory.com/79?category=249379

 

[C++] set container 정리 및 사용법

안녕하세요. BlockDMask 입니다 ! 오늘은 연관 컨테이너 set, multiset, map, multimap 중 set에 대해 학습해보겠습니다. 순서는 set container -> set의 사용법 -> set의 생성자와 연산자 -> set의 멤버 함수 -..

blockdmask.tistory.com

이분께서 정리 너무 잘 해주셨으니까 읽으면 될 것 같다.

 

또 메인함수 부분에 

int* arr = new int[n] 이 있는데

이건 동적으로 생성해서 그렇다. 배열 크기를 지금 받는대로 만들어야하는 상황인데

얼마나 필요할지 몰라서 동적으로 생성하였다.

이렇게 하면 열개 필요할때 딱 열한개(\n)포함 만들어준다. 그만큼 메모리 소모하기도 하고.

그냥 그렇다.

 

#include <iostream>
#include <set> //컨테이너 사용을 위함.
using namespace std;

float tri(float a ,float b){	//삼각형 계산해주는 함수 tri 이다.
	float ret = 0;
	ret = (a - b) / 2;			//a와 b를 받아서 빼주고 2로 나누는데
	if(ret < 0){				//음수일경우 -1을 곱해서 양수로 만들어준다.
		ret = ret * -1;
	}
	return ret;					//ret값 반환
}


int main(){
	int round = 0;				//처음에 테스트케이스 몇개 들어오는지?
	cin >> round;				//round에 테스트케이스 개수 저장.

	for(int i = 0; i < round; i++){		//round개수만큼 돌껀데
		int n;							//n개 정수형으로 만들꺼임.
		int flag = 0;					//flag 는 flag 입니다.
		cin >> n;						//n에다가 입력받아서 배열을 만들껀데
		int* arr = new int[n];			//n은 동적배열입니다. 들어오는만큼 생성할꺼임.

		if(n == 1){						//근데 한개 들어오면 고민할필요가 없습니다.
			cin >> n;
			cout << "0" << endl;		/// 만약 들어오는게 한개면요?
			continue;					//컨티뉴로 뒤에 과정 생략합시다.
		}
		else{							///  근데 한개가 아닙니다.
			set<float> answer;			//float형 컨테이너를 만들어줍시다.
										//컨테이너를 쓴 이유는 겹치는건 들어가지 않아서
										//굳이 중복 검사를 안해줘도 괜찮아서 입니다.

			for(int i = 0; i < n; i++) {//배열에다가 넣어줍시다 일단 전부.
				cin >> arr[i];
			}

			for(int j = 0; j < n - 1; j++){//2중 배열을 만들어 주어서, 검사할놈과
				for(int k = 0; k < n; k++){//그 다음놈을 계산에 활용할 수 있도록 합시다.
					float result = tri(arr[j] ,arr[k]); //그리고 위에 tri로 보내줘서 계산.
														//그 값을 result에 float형으로 저장.
														//소수일수도있기때문입니다.

					//cout << result << "result"<<endl; //결괏값 확인용 디버그
				}
			}
			cout <<answer.size() - 1 << endl; //전체 케이스 중에서 0을 빼준다. 0에서 시작하기 때문.
		}
	}
}

주석에 자세히 적어두었다. 컨테이너 기능이 개꿀인거같다 이런거 할 때엔.

 

아무튼 첨으로 콘테스트에서 뭐 해봤다. 뿌듯하네 어려운 문젠 아녔다고 치더라도.

반응형