Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | |||||
| 3 | 4 | 5 | 6 | 7 | 8 | 9 |
| 10 | 11 | 12 | 13 | 14 | 15 | 16 |
| 17 | 18 | 19 | 20 | 21 | 22 | 23 |
| 24 | 25 | 26 | 27 | 28 | 29 | 30 |
| 31 |
Tags
- 도시 분할 계획
- 파사드패턴
- 브루트포스
- 19951
- 이미지삭제
- 레벨 햄버거
- 3967
- 백준
- 18869
- gdg스터디
- 자바
- 삼성전자dx
- 삼성b형
- 분할정복
- 13905
- pushswap
- 오늘의 문제
- festify
- 42서울
- 삼성전자 dx 알고리즘 특강
- 16719
- 9465
- 다이나믹 프로그래밍
- 42서울 #개발 #대외활동
- 알고리즘특강
- 이미지저장
- born2beroot
- 16974
- 최소지식원칙
- 최소 스패닝 트리
Archives
- Today
- Total
그거 기능이에요
백준 18869 멀티버스 2 본문
문제 소개
- M개의 우주에 N개의 행성이 있다.
- 각 행성별로 크기가 주어지는데 여기서 각 우주별로 행성을 크기 순서대로 등수를 매길 것이다.
- 여기서 행성의 크기 순서가 동일한 우주는 균등한 쌍의 우주라고 하자.
- 균등한 우주의 쌍의 개수는 총 몇개일까?
접근 방법
- 각 우주별로 행성의 크기 순서로 등수를 매기는 과정이 가장 중요한 로직이라고 생각했다.
- 크기 순서를 알려면 우선 정렬을 해야하는데 단순히 n^2인 로직을 사용하면 안되고, nlogn인 sort 함수를 사용하기로 결정
- 각 우주별로 정렬을 하고 각 크기별로 크기 순위 몇 등인지 배열에 저장해둔다
- 이후 원본 입력 벡터를 보면서 크기 순위 몇 등인지 문자열로 저장한다.
- 문자열을 벡터로 저장해두고 모든 순위를 다 구하고 난 뒤 겹치는 문자열의 개수를 세서 출력한다.
풀이 코드
#include <vector>
#include <iostream>
#include <algorithm>
#include <string>
#include <utility>
using namespace std;
vector< vector<int> > uni(101, vector<int>(10001));
int big[1000001];
vector<string> couple;
int main()
{
int M, N, t;
int idx = -1;
int ret = 0;
cin>>M>>N;
while (M != ++idx)
{
for (int i = 0; i < N; i++)
{
cin>>uni[idx][i];
}
}
for (int i = 0; i < M; i++)
{
string temp;
vector<int> after = uni[i];
sort(after.begin(), after.begin() + N);
for (int j = 0; j < N; j++)
{
big[after[j]] = j + 1; // 이것도 그냥 map 쓰는게 빨랐을 듯(공간복잡도가 줄어들 수 있음. 최악의 케이스에는 동일)
}
for (int j = 0; j < N; j++)
{
temp += to_string(big[uni[i][j]]);
}
couple.push_back(temp);
}
// -> map에서 검사하면 더 빠르게 가능(string을 map에 저장)
for (int i = 0; i < M - 1; i++)
{
for (int j = i + 1; j < M; j++)
{
if (couple[i] == couple[j])
ret++;
}
}
cout<<ret<<endl;
}'백준 > 오늘의 문제' 카테고리의 다른 글
| 백준 빌런 호석 22251 (4) | 2024.12.26 |
|---|---|
| 백준 14950 정복자 (3) | 2024.12.22 |
| 백준 19951 태상이의 훈련소 생활 (3) | 2024.12.18 |
| 백준 16719 ZOAC (0) | 2024.12.17 |
| 백준 9465 스티커 (0) | 2024.12.17 |