Make Unreal REAL.
article thumbnail
Level 3. 섬 연결하기

Level 3. 섬 연결하기 유니온 파인드(Union-Find) 두 노드가 같은 집합에 속하는지 확인하기 위한 서로소 집합(Disjoint set)을 처리하는 알고리즘이다. 유니온 파인드는 대표 노드를 저장하는 1차원 배열을 이용하며, 각 원소의 대표 노드는 자기 자신으로 초기화한다. 모두 서로 다른 잡합에 존재함을 뜻한다. 유니온(Union) : 특정 2개를 연결해 같은 집합으로 묶는다. 대표 노드끼리 연결해주는 작업이다. a, b의 대표 노드가 각각 x, y이고 x < y라고 한다면, union(a, b)는 y 위치의 값을 x로 갱신해주는 작업이다. 파인드(Find) : 두 노드가 같은 집합에 속해 있는지 확인한다. 자신의 대표 노드를 찾는 작업이다. 해당 원소의 대표 노드부터 올라가면서, 재귀적으로..

article thumbnail
Level 3. 가장 긴 팰린드롬

Level 3. 가장 긴 팰린드롬 긴 문자열부터 모든 부분 문자열을 확인하는 방법이지만, 시간 초과가 발생했다. // 이 풀이는 시간 초과가 발생한다. #include using namespace std; int solution(string s) { int answer = 0; size_t n = s.length(); for (int len = n; 0 < len; --len) for (int ofs = 0; ofs + len

article thumbnail
Level 3. 숫자 게임

Level 3. 숫자 게임 최소힙을 구성하고 앞에서부터 비교하면서, B가 더 커 점수를 얻을 수 있는 경우 A의 다음 숫자와 비교하면 된다. 레벨 3 문제는 아닌 것 같다.. #include #include #include using namespace std; int solution(vector A, vector B) { int answer = 0; priority_queue pqA, pqB; for (int num : A) pqA.emplace(num); for (int num : B) pqB.emplace(num); while (!pqB.empty()) { if (pqA.top() < pqB.top()) ++answer, pqA.pop(); pqB.pop(); } return answer; }

article thumbnail
Level 2. 교점에 별 만들기

Level 2. 교점에 별 만들기 전에 봤을 때 별을 직접 그려야 하는 문제인 줄 알고 넘겼었는데, 막상 자세히 읽어보니 그렇게 어려운 문제는 아니었다. 가장 바깥 쪽의 점들만 표시하는 건 줄 알고 기겁했었는데, 그냥 모든 정수 점들을 구하면 되는 문제여서 쉬웠다. 교점을 구하는 것은 주어진 공식을 사용하면 되고, 그 중 좌표가 정수인 교점만 활용하면 된다. 교점은 두 직선을 통해 구하므로, 이중 for문을 사용하면 된다. int끼리 곱하면서 범위가 넘어갈 수 있기 때문에 long 타입에 저장해준다. 교점을 구하면서 정답 영역의 최소와 최대 지점을 함께 갱신한다. 그리고 마지막에 정답에 점들을 찍어주면 된다. Y 좌표는 maxY - y가 되고, X 좌표는 x - minX가 됨에 주의해야 한다. #incl..

article thumbnail
Level 2. 유사 칸토어 비트열

Level 2. 유사 칸토어 비트열 너무 어려운 수학 문제.. 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr #include using namespace std; int f(int n, long long x) { if (n == 1 || f(n - 1, x / 5)) return (x % 5) != 2; else return 0; } int solution(int n, long long l, long long r) { int answer = 0; for (long long i = l - 1; i < r; ++i) answer += f(n, i); retu..

article thumbnail
Level 2. 숫자 카드 나누기

Level 2. 숫자 카드 나누기 우선, 원소의 범위가 크므로 단순 반복문을 사용하면 시간 초과가 발생할 것이다. 약수를 구하는 것은 유클리드 호제법을 사용하면 된다. GCD(a, b) = GCD(b, (a % b)) a, b의 대소관계는 상관 없다. GCD(a, b, c) = GCD(GCD((a, b), c)이다. 이 문제는 그냥 각 배열의 최대공약수를 구하고, 조건에 맞는 큰 수를 반환하면 된다. 문제에서는 마치 최대 공약수를 구하고도, 그 최대 공약수의 약수 중에서 조건에 맞는 것을 찾아야 하는 것처럼 나와 있다. 하지만, 최대 공약수로 나누어 떨어지는 데 그 약수로 나누어 떨어지지 않는 경우는 존재할 수 없다. #include #include #include using namespace std; ..

검색 태그