분류 전체보기
터렛 풀이
문제 링크: https://www.acmicpc.net/problem/1002 백준 기하 1 6단계 - 1002번 터렛을 풀어보았다. 풀이: 좌표와 거리를 받아, 두 원의 교차점의 수를 출력한다. C++ #include #include using namespace std; int main() { int t; cin>>t; while(t!=0) { int count=0; int x1,y1,r1,x2,y2,r2; cin>>x1>>y1>>r1>>x2>>y2>>r2; double dis=sqrt(pow(x1-x2,2)+pow((y1-y2),2)); int rsum=r1+r2; int rsub=(r1>r2)?r1-r2:r2-r1; if(dis!=0)// { if(rsum==dis) count++; else if ..
택시 기하학 풀이
문제 링크: https://www.acmicpc.net/problem/3053 백준 기하 1 5단계 - 3053번 택시 기하학을 풀어보았다. 풀이: 유클리드 기하학은 pi를 설정해 그거대로 계산하면 되고, 택시 기하학에서의 원은 유클리드 기하학에서의 원이 아닌 마름모 형태가 되므로 마름모의 넓이를 계산하면 된다. C++ #include using namespace std; const double pi = 3.1415926535897; int main() { cout >r; eure=pi*r*r; tare=double(r*r*2); cout
참외밭 풀이
문제 링크: https://www.acmicpc.net/problem/2477 백준 기하 1 4단계 - 2477번 참외밭을 풀어보았다. 풀이: 빼야 할 영역을 찾기만 하면 쉽게 풀 수 있는 문제다. 빼야 할 영역은 도형을 돌다 보면 방향이 같은 곳이 한 변을 건너뛰며 생기게 되는데, 그 건너뛰게 된 곳이 바로 빼야 할 영역의 변이 된다. C++의 경우 https://velog.io/@junttang/BOJ-2477-%EC%B0%B8%EC%99%B8%EB%B0%AD-%ED%95%B4%EA%B2%B0-%EC%A0%84%EB%9E%B5-C 를 참고했다. C++ #include using namespace std; int main() { pair cor[12]; int k,a,b,ba,sa; cin>>k; fo..
직각삼각형 풀이
문제 링크: https://www.acmicpc.net/problem/4153 백준 기하 1 3단계 - 4153번 직각삼각형을 풀어보았다. 풀이: 세 변을 입력받고, 피타고라스 정리를 이용해 직각삼각형인지를 알아본다. C++ #include using namespace std; int main() { int a,b,c; while(true) { cin>>a>>b>>c; if(a==0&&b==0&&c==0) break; if(a*a==b*b+c*c) cout
네 번째 점 풀이
문제 링크: https://www.acmicpc.net/problem/3009 백준 기하 1 2단계 - 3009번 네 번째 점을 풀어보았다. 풀이: 좌표를 입력받고, 경우를 나눠 마지막 점의 x y 좌표를 출력한다. C++ #include using namespace std; int main() { int x[3]; int y[3]; int rex,rey; for(int i=0;i>x[i]>>y[i]; if(x[0]==x[1]) rex=x[2]; else if (x[0]==x[2]) rex=x[1]; else rex=x[0]; if(y[0]==y[1]) rey=y[2]; else if (y[0]==y[2]) rey=y[1]; else rey=y[0]; cout
직사각형에서 탈출 풀이
문제 링크: https://www.acmicpc.net/problem/1085 백준 기하 1 1단계 - 1085번 직사각형에서 탈출을 풀어보았다. 풀이: 직사각형의 각 변까지의 거리 중 최소를 택하면 된다. C++ #include using namespace std; int main() { int x,y,w,h; cin>>x>>y>>w>>h; int l1,l2; l1=w-x; l2=h-y; int dis1=(l1>x)?x:l1; int dis2=(l2>y)?y:l2; int dis3=(dis1>dis2)?dis2:dis1; couty: min=y if min>w-x: min=w-x if min>h-y: min=h-y print(min) Java
서로 다른 부분 문자열의 개수 풀이
문제 링크: https://www.acmicpc.net/problem/11478 백준 집합과 맵 7단계 - 11478번 서로 다른 부분 문자열의 개수를 풀어보았다. 풀이: 브루트 포스 방식으로 부분 문자열을 전부 구하면 된다. C++에서 중복을 없애기 위해서 벡터를 정렬하고, 그 후에 unique erase를 썼다. C++ #include #include #include #include using namespace std; int main() { string s; cin>>s; vector v(s.size()); for(int i=0;i0;j--) { v.push_back(s.substr(i,j)); } } sort(v.begin(), v.end()); // erase 쓰기 위해 v.erase(uniqu..
대칭 차집합 풀이
문제 링크: https://www.acmicpc.net/problem/1269 백준 집합과 맵 6단계 - 1269번 대칭 차집합을 풀어보았다. 풀이: 집합 두 개를 서로 빼서 남은 요소의 수를 구한다. C++의 경우, set_symmetric_difference를 이용했는데, 결과를 넣는 곳인 back_inserter는 벡터를 써야 하는 거 같다. 다른 사람들도 다 벡터를 쓰길래 set을 입력해 봤더니 에러가 났다. C++ #include #include #include #include using namespace std; int main() { int n,m; cin>>n>>m; set a; set b; vector res; for(int i=0;i>nn; a.insert(nn); } for(int i..
듣보잡 풀이
문제 링크: https://www.acmicpc.net/problem/1764 백준 집합과 맵 5단계 - 1764번 듣보잡을 풀어보았다. 풀이: 두 명단에서 겹치는 사람의 이름을 정렬해 출력한다. C++의 경우, map을 이용했다. C++ #include #include #include #include using namespace std; int main() { int n,m,cnt=0; string s; cin>>n>>m; mapnv; vectorres; for(int i=0;i>s; nv.insert(make_pair(s,true)); } for(int i=0;i>s; if(nv[s]) { cnt++; res.push_back(s); } } sort(res.begin(),res.end()); cout
숫자 카드 2 풀이
문제 링크: https://www.acmicpc.net/problem/10816 백준 집합과 맵 4단계 - 10816번 숫자 카드 2를 풀어보았다. 풀이: 카드의 개수를 세면 된다. C++의 경우, upper_bound와 lower_bound를 썼다. 변수로 줄 땐 auto형을 써야 한다. 원래는 count함수를 썼는데, 시간초과가 났다. 파이썬의 경우, 카운터를 썼다. C++ #include #include #include using namespace std; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); int n,m,a; cin>>n; vectornv; vectormv; for(int i=0;i>a; nv...