알고리즘/백준 문제풀이

    [C++] 하키(1358번)

    [C++] 하키(1358번)

    문제 풀이 첫번째 예제를 예로 들면 이런 상황이라고 볼 수 있습니다. 이 문제를 푸는 알고리즘은 다음과 같습니다. 직사각형안인가? 왼쪽 반원 중심부터 거리가 r(=h/2) 이하인가? 오른쪽 반원 중심부터 거리가 r(=h/2) 이하인가? 위 셋 중에 하나라도 포함된다면 링크안에 있는것으로 판별합니다. 코드로 표현하면 다음과 같습니다. #include #include using namespace std; int main() { double w,h,x,y,p; //p는 선수의 수 cin>>w>>h>>x>>y>>p; int aws=0; for(int i=0; i>p_x>>p_y; double distance_from_left_circle=sqrt(pow((x-p_x),2)+pow(y+h/2-p_y,2)); do..

    [C++] 어린 왕자(1004번)

    [C++] 어린 왕자(1004번)

    문제 풀이 진입/이탈을 세는 매커니즘은 다음과 같습니다. 출발점이 해당 행성계 안에 있는지 확인합니다. 도착점이 해당 행성계 안에 있는지 확인합니다. 출발,도착점 둘다 해당 행성계 안에 있거나 밖에 있는거 아니면 count를 증가시켜줍니다. (=진입/이탈횟수를 저장하는 변수) #include #include #include #include using namespace std; int main() { int t; //테스트케이스 cin>>t; for(int i=0; i>startX>>startY>>endX>>endY; pair start=make_pair(startX,startY); //출발점 pair end=make_pair(endX,endY); //도착점 int n; //행성계 갯수 cin>>n; ve..

    [C++] 백준-터렛(1002번)

    [C++] 백준-터렛(1002번)

    문제 풀이 int t; cin>>t; 먼저 테스트케이스의 갯수 T를 입력받습니다. int x1,y1,r1,x2,y2,r2; for (int i = 0; i >x1>>y1>>r1>>x2>>y2>>r2; double distance=sqrt(pow(x1-x2,2)+pow(y1-y2,2)); ... x1,y1,r1 x2,y2,r2값을 입력받고, 두 원의 중심 사이의 거리를 distance에 저장합니다. //원이 겹칠떄 if (distance == 0 && r1 == r2) cout r2 ? r2 : r1) r2 ? r1 : r2)) cout r2 ? r1 : r2)는 오른쪽 상황입니다. 이때 원이 완전히 겹치는 경우에도 distance + (r1 > r2 ? r2 :..

    [C++] 백준-택시 기하학(3053번)

    [C++] 백준-택시 기하학(3053번)

    문제 풀이 이 문제는 소수점을 고정해서 출력하는 방법을 고민해보라는 문제인 것 같습니다. #include using namespace std; int main() { double uclid,taxi; int r; cin>>r; cout

    [C++] 백준-참외밭(2477번)

    [C++] 백준-참외밭(2477번)

    문제 풀이 int n; cin>>n; 먼저, 1제곱미터에 넓이에 자라는 참외 개수를 변수 n에 받습니다. vector save; int big_garo=0,big_sero=0; //큰 사각형의 가로,세로 int big_garo_index,big_sero_index; int small_a,small_b; //작은 사각형의 두 변 변의 방향(동쪽은 1, 서쪽은 2, 남쪽은 3, 북쪽은 4) + 길이 를 순서대로 저장하기 위해서 벡터변수 save(pair를 저장)를 만들어줍니다. 그리고 big_garo는 위 그림으로 따졌을때 160, big_sero는 50이 들어갈 예정인 변수입니다. 전, 큰 사각형넓이 - 파먹힌 작은 사각형넓이를 해줄것이기 때문에 위와같이 변수를 선언했습니다. small_a, small_b..

    [C++] 백준-직각삼각형(4153번)

    [C++] 백준-직각삼각형(4153번)

    문제 풀이 #include #include #include #include using namespace std; int main() { while(1) { int a,b,c; cin>>a>>b>>c; vector v={a,b,c}; sort(v.begin(),v.end()); if(a==0 && b==0 && c==0) break; if(pow(v[2],2)==pow(v[0],2)+pow(v[1],2)) cout

    [C++] 백준-네 번째 점(3009번)

    [C++] 백준-네 번째 점(3009번)

    문제 풀이 직사각형의 세점을 줬을때, 나머지 한 점의 좌표는 아직 2번 나오지 않은 x값과 y값이 해당 좌표의 값입니다. #include #include using namespace std; int main() { pair p[4]; for(int i=0; i>x>>y; p[i]=make_pair(x,y); } if(p[0].first==p[1].first) p[3].first=p[2].first; else if(p[0].first==p[2].first) p[3].first=p[1].first; else if(p[1].first==p[2].first) p[3].first=p[0].first; if(p[0].second==p[1].second) p[3].second=p[2].second; else if(p..

    [C++] 백준-직사각형에서 탈출(1085번)

    [C++] 백준-직사각형에서 탈출(1085번)

    문제 풀이 #include using namespace std; int main() { cin.tie(NULL); ios_base::sync_with_stdio(false); int x,y,w,h; cin>>x>>y>>w>>h; int temp1=x; int temp2=w-x; int temp3=y; int temp4=h-y; int min1=( temp1 < temp2 ) ? temp1 : temp2; int min2=( temp3 < temp4 ) ? temp3 : temp4; cout