반응형 전체 글307 [C++/백준] 두 원 (No. 7869) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제는 삼각형의 선분과 사잇각에 대해 알고 있으면 쉽게 풀 수 있는 문제다. 처음에 직접 교점의 좌표를 구해서 풀어야 하나? 생각이 들었지만, 다시 생각해보니 r1, r2, 두 원점사이의 거리를 알고 있기 때문에 쉽게 풀 수 있겠다는 생각이 들었다. 아래 그림을 보며 어떻게 경우를 분류할지 생각해보자 먼저 아래 경우는 두 원이 겹치지 않는 경우다. 중점사이의 거리 d가 r1+r2보다 크거나 같으면 두 원은 겹치는 적이 없다. 아래는 두 원 중 한 원이 다른 원에 포함되는 경우다. 두 원 중 큰 원의 반지름 r1.. 2024. 6. 20. [SWEA/C++] 돌 추가 게임 (No. 20945) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제를 풀기 위해서 고민을 좀 많이 했다. 문제에 대해 간단히 설명하자면 Nim 게임이라 불리는 문제에서 응용된 문제다. 여기서 스프라그-그런디 정리를 Nim 게임에 적용하면 돌 무더기에 대해 xor을 계산하는 것으로 누가 이기는지 알 수 있다. 그러므로 후공인 지혜가 이기기 때문에 모든 돌 무더기를 xor값이 0이 되도록 만들기 위해 돌 무더기에 돌을 추가하는데, 이 때 추가해야하는 가장 적은 돌의 양을 계산하면 되는 문제다. 그렇다면 돌을 어떻게 추가해야 가장 적게 돌을 추가할 수 있을까? 먼저 생각해보면 xor.. 2024. 6. 20. [SWEA/C++] 서로소 그리드 (No. 20731) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제는 GCD를 이용하면 쉽게 풀 수 있는 문제다. 문제를 보면 GCD(k+i, k+j)가 1이면 1, 아니면 ?를 N*N 배열에 기록한다.이때, 이 배열의 조건에 만족하는 k가 존재하는지 판단하는 문제다. 이 문제에서 중요한 점은 K의 범위가 정해져 있지 않기 때문에 모든 조건에 맞는 K가 있는지 확인하면 된다. 그렇다고 모든 K에 대해 탐색할 수는 없다. 그러면 GCD(k+i, k+j)를 어떻게 표현할 수 있을까? i > j의 조건을 만족하는 경우에 GCD(k+i, k+j)가 1이 아니라면 GCD(k+i, i-j.. 2024. 6. 19. [백준/C++] 선분 그룹 (No. 2162) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 선분 교차 3와 크게 다를게 없는 문제다." data-ke-type="html">HTML 삽입미리보기할 수 없는 소스단순히 여기에 union_find가 합쳐진 문제다. 먼저 n개의 선분에 대해 선분 a가 다른 선분들과 교차하는지(만나는지) for문으로 체크를 해준다. 이때, 선분이 교차하는지 확인은 외적을 이용할 수 있다. 위 그림처럼 선분 a와 b가 교차한다면 외적한 값 v1, v2의 부호가 다름을 알 수 있다.이때, 하나의 선분을 기준으로 판단을 하면 안된다. 왜냐하면 오른쪽 그림처럼 외적 했을 때, a선분을 기.. 2024. 6. 19. [백준/C++] 집으로 (No. 1069) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제는 단순히 거리를 계산하면 쉽게 풀 수 있는 문제다. 먼저 점프해서 이동하는 이동거리 D를 이동 시간 T로 나눈 값이 1보다 작다면 걸어가는 것 보다 느리기 때문에 점프를 이용할 이유가 없다. 반대로 점프할 경우가 이득이라면 3가지 방법으로 나눌 수 있다. 그전에 n은 (0, 0)에서 목적지인 A 점 까지의 이동거리를 D로 나눈 값이다.여기서 n을 계산하는 이유는 A점까지 n번 점프하고 남은 거리를 걸어가는 방법을 계산하기 위해서다. 1. (0, 0)에서 직선거리로 점프를 n번 한 다음 걸어서 목적지인 A지점에 .. 2024. 6. 18. [백준/C++] 선분 교차 3 (No. 20149) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이전에 풀었던 선분 교차 2에서 교점의 좌표만 추가된 문제다." data-ke-type="html">HTML 삽입미리보기할 수 없는 소스그렇기 때문에 이전의 코드에서 좌표를 계산하는 부분만 추가했다. 이전 코드에 교점이 있는 경우 그 교점의 범위가 선분의 범위에 들어오는지 체크하기 위해 교점의 좌표를 x, y로 직접 구했었다. 그래서 실제 교점을 찾기 위해서는 이전에 구한 x좌표, y좌표를 이용하면 된다.여기서 주의해야할 점은 허용오차가 매우 작기 때문에 double형을 사용해야하며 부동소수점으로 인한 오차가 커지지 않.. 2024. 6. 17. [백준/C++] 선분 교차 2 (No. 17387) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제를 처음 풀 때 단순히 연립 방정식을 이용해 풀었다. 연립 방정식을 만들면 교점인 x축의 좌표를 계산할 수 있는데, 이 때 x축의 분모가 0이면 평행하다는 뜻이다.(행렬식인 det를 계산해 det가 0인지 판단하는 방법과 동일) 여기서 중요한 점은 기울기가 같아도 교점이 있는 경우가 있다. 기울기가 같은데 교점이 있다는 것은 일차함수로 바꿨을 때 겹친다는 뜻이다. 여기서 겹치는지 확인하는 방법은 간단하게 y절편을 기준으로 y절편 값이 같은지 확인했다.만약 y절편이 같다면 두 선분은 하나의 일차함수에 겹치는 선분이.. 2024. 6. 16. [백준] Solved.ac 랜덤 마라톤 (No. 27323, 15406, 22935, 5839, 14011, 23380, 14731, 1990) Solved.ac 랜덤 마라톤 후기 링크 ">HTML 삽입미리보기할 수 없는 소스 마라톤이 갱신 돼서 다시 풀어봤다. 이번에는 마지막 문제가 골드라 어떤 문제일까 기대하며 문제를 풀었다. 문제 + 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 후기] A. 직사각형 (1분)문제 링크" data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 이 문제는 진짜 단순히 A*B를 출력하는 문제라 어려울 게 없는 문제였다... 더보기 구현#include using namespace std;int main() { int A, B; cin >> A >> B; cout B. Check the Check (14분)문제 링크".. 2024. 6. 15. [백준/C++] 기말고사 작품전시 (No. 28094) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제는 작품마다 순서가 있어서 어떤 작품A가 작품 B보다 앞에 있는 경우 점수 V를 얻는 문제다. 여기서 A작품이 B작품이 앞에 있을 경우만 점수 V를 얻으므로, 두 작품을 비교하는 경우를 2차원 vector에 저장해 두고 작품의 순서가 정해지면, 순서가 vector[A][B]의 값을 구하면 된다. 그림을 통해 생각해 보면vector[A][B]는 A가 B보다 앞에 있는 경우 얻는 점수의 총 합이다. 그리고 점수를 얻는 경우 중 최대값을 구하고, 그 최대값을 얻는 경우가 총 몇 개인지 출력하면 된다. 모든 경우의 수는.. 2024. 6. 15. [백준/C++] 보석 도둑 (No. 1202) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제를 처음 봤을 때, 정렬을 이용해 가장 가치가 높은 보석부터 가방에 넣을 수 있는지 확인하고, 무게가 가장 비슷한 가방에 넣으면 되겠다는 생각을 했다. 하지만, 문제는 사용한 가방에 있었다.이분 탐색으로 적절한 가방을 찾는 과정에서 이미 사용한 가방을 삭제하지 않고 처리할 적당한 방법이 떠오르지 않았다.(만약 삭제할 경우 삭제하는 과정에서 O(N)의 시간복잡도가 필요하기 때문에 문제의 시간복잡도는 O(N^2)이 된다.) 그래서 반대로 가방의 무게를 기준으로 보석을 찾도록 방법을 바꿨다. 하나의 가방에는 하나의 보.. 2024. 6. 12. [백준/C++] 다각형의 면적 (No. 2166) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제는 말 그대로 다각형의 면적을 계산하는 문제다. 최근에 그래픽스를 공부하며 벡터에 대해 공부했기 때문에 쉽게 풀 수 있는 문제였다. 다각형의 넓이를 구하기 위해서 아래 그림과 같이 다각형을 분리한다. 위 그림의 파란색 부분의 넓이를 구하는 방법은 행렬식을 쓰면 된다. 1번 점에서 2번 점으로 가는 벡터와, 1번점에서 3번점으로 가는 벡터의 행렬식을 구하면 그 값의 절반이 삼각형의 넓이가 된다. $$ v1 = (x2-x1, \,y2-y1) \;\;\;\; v2 = (x3-x1, \,y3-y1) $$와 같이 벡터를.. 2024. 6. 11. [백준/C++] 우수 마을 (No. 1949) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 이 문제는 사실 잘 보면 트리의 독립집합 문제와 크게 다를게 없는 문제다." data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 문제의 조건을 정리하면 우수 마을이 아닌 마을은 주변에 적어도 하나의 우수마을이 있어야 하며, 우수 마을인 마을은 인접한 마을에 우수 마을이 있으면 안된다. 그림을 보며 조건에 대해 생각해보자 위 그림과 같은 트리가 있을 경우 A마을이 우수 마을이면 B,C,D 마을은 우수 마을이 되면 안된다.그러므로 A마을이 우수 마을인 경우에는 B, C, D 마을이 우수마을이 아닌 경.. 2024. 6. 10. [백준/C++] 트리의 독립집합 (No. 2213) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 처음에 이 문제를 봤을 때, 아무 생각 없이 하나의 노드를 기준으로 두번 검사하면 되겠다는 생각을 했다. 하지만 예제의 입력을 보자마자 착각했다는 것을 깨닫고 다시 풀었다... 새로 푼 방법은 두가지 경우로 나눠서 계산하는 방법으로 트리를 그리면서 계산하는 방법이다. 먼저 그래프가 트리의 형태이므로 한 정점을 기준으로 트리를 그린다. 이후 현재 노드와 하위 노드들(자식 노드들)의 값을 포함해 만들 수 있는 독립집합의 최대값을 DP라는 배열에 저장한다. DP라는 배열을 그리는 이유는 중복된 계산을 줄이기 위해서다. 어떤 .. 2024. 6. 9. [프로그래머스/C++] 의상 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 먼저 옷의 종류를 map을 이용해 분류를 했다는 가정하에 풀이를 소개하겠다.(이름이 같은 옷은 없으므로, 특정 의상의 수만 파악하면 문제를 풀 수 있기 때문이다.) 약 3가지 방법을 소개하는데, 가장 효율이 좋은 방법은 마지막 방법이다.그러므로 효율적인 풀이가 필요하다면 마지막 풀이를 보는 것을 추천한다. 1. 단순 재귀 처음 문제를 봤을 때, 풀이가 생각이 날듯 말듯 했다. 뭔가 경우의 수를 잘 빼면 해결 될 것 같았는데, 다른 방법이 빠르게 생각이 나지 않아서 먼저 재귀로 문제를 해결했다. 하지만, 재귀로 문제를 풀.. 2024. 6. 7. [백준/C++] 최솟값 찾기 (No. 11003) 문제 문제 설명 ">HTML 삽입미리보기할 수 없는 소스 풀이 " data-ke-type="html">HTML 삽입미리보기할 수 없는 소스 [문제 풀이] 처음에 이 문제를 보자마자 map의 정렬을 이용해 개수를 세면 O(N*logN)으로 쉽게 해결되겠다는 생각이 들었다. 그런데 막상 문제를 풀어보니 계속 시간초과가 났다... 결국에 priority_queue부터 Map, Set, 등의 여러 방법을 사용하다가 Map과 priority_queue는 삽입하는 과정이 느렸던게 생각나서 Union Find를 이용해 문제를 해결했다. + Union Find로 문제를 해결한 후 deque를 이용한 더 좋은 O(N)의 풀이가 있다는 것을 발견했다 ㅠㅠ 사실 Union Find를 이용한.. 2024. 6. 6. 이전 1 2 3 4 5 6 7 ··· 21 다음 반응형