코드포스 goodbye 2020 a번 문제 c++ 풀이이다.
codeforces.com/contest/1466/problem/A
문제가 뭐 말이 많은데
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
이분께서 정리 너무 잘 해주셨으니까 읽으면 될 것 같다.
또 메인함수 부분에
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에서 시작하기 때문.
}
}
}
주석에 자세히 적어두었다. 컨테이너 기능이 개꿀인거같다 이런거 할 때엔.
아무튼 첨으로 콘테스트에서 뭐 해봤다. 뿌듯하네 어려운 문젠 아녔다고 치더라도.
'_BOJ > _C , C++' 카테고리의 다른 글
BOJ_10815 숫자 카드 c++_머지소트,이진탐색 과 코드를 앞으로 어떻게 짜야 할지 와 내 오답노트. (0) | 2021.07.12 |
---|---|
[BOJ]11098-첼시를 도와줘! c++ (0) | 2021.01.18 |
BOJ_18269 : Where Am I?_ USACO 2019 December Contest > Bronze (0) | 2020.04.09 |
BOJ_18268 : COW GYMNASTICS, 소체조 (0) | 2020.03.27 |
BOJ_2941 : 크로아티아 알파벳 C (0) | 2020.03.20 |