반응형
아이디어
vector에 3개의 값을 유지한다. v(입력값, 기존 index, 정렬후 index).
1. 입력을 다 받고 입력값 기준으로 sort를 실시 한 뒤
2. 각 entry들이 몇번째 숫자인지 순서를 매긴 후 (정렬 후index)
3. 기존 index를 기준으로 원상 복구 시켜서 정렬 후 index를 출력한다.
C++ 풀이
#include <bits/stdc++.h>
using namespace std;
vector<pair<int,pair<int,int>>> v;
bool compare(pair<int,pair<int,int>>& a, pair<int,pair<int,int>>& b)
{
return a.second.first < b.second.first;
}
int main(void)
{
ios::sync_with_stdio(false);
cin.tie(NULL);
int N;
cin>> N;
for(int i = 0 ; i< N; i++)
{
int tmp;
cin >> tmp;
v.push_back({tmp,{i,0}}); //v(입력값, 기존 index, 정렬후 index)
}
sort(v.begin(), v.end());
int prev = v[0].first;
v[0].second.second =0;
for(int i = 1; i< N; i++)
{
if(v[i].first != prev) // 다른게 나오면
{
v[i].second.second = v[i-1].second.second+1; //1을 증가시켜 넣고
}else{ //같은게 나오면
v[i].second.second = v[i-1].second.second; // 그대로 넣어라.
}
prev = v[i].first;
}
sort(v.begin(), v.end(), compare);
for(int i = 0 ; i< N; i++)
{
cout << v[i].second.second << " " ;
}
}
Python 풀이
흠.. C++과 같은 로직으로 풀긴했는데 시간이 너무 오래 걸리더라.
다른사람들 2000ms대로 풀이 하길레 봤더니, dictionary사용해서 나도 풀어봤다.
4840ms 짜리 풀이
import sys
input = sys.stdin.readline
N = int(input().rstrip())
sort_list = map(int,input().rstrip().split())
use_list = []
index_dp = [0]*(N+1)
for i, value in enumerate(sort_list): #인덱스 번호를 저장하기 위해서.
use_list.append([value,i])
use_list.sort() #value순으로 오름차순 정렬
cnt = 0
prev = use_list[0][0]
#따로 기존 index대로 정렬 다시 하지 않고,
#다른 list에다가 저장.
for l in use_list:
if prev != l[0]:
cnt += 1
index_dp[l[1]] = cnt
else :
index_dp[l[1]] = cnt
prev = l[0]
for i in range(N):
print(index_dp[i], end =" ")
2000ms 짜리 풀이
import sys
input = sys.stdin.readline
N = int(input().rstrip())
l = list(map(int,input().rstrip().split()))
#set 해서 unique하게 만들고
uni = list(set(l))
#정렬하고
uni.sort()
d = {}
#index를 dictionary에 저장.
for i, value in enumerate(uni):
d[value] = i
#dictionary에는 해당 숫자의 순서가 저장되어있음.
for v in l:
print(d[v], end = " ")
반응형
'Algorithm > Problem Solve' 카테고리의 다른 글
[백준 1167번] 트리의 지름 (C++ / Python) (0) | 2020.12.30 |
---|---|
[백준 1149번] RGB거리 (DP기본 / C++) (0) | 2020.12.30 |
[백준 11724번] 연결 요소의 개수 (C++ / Python) (0) | 2020.12.29 |
[백준 11723번] 집합 (C++/ Python) (0) | 2020.12.29 |
[백준 11399번] ATM (0) | 2020.12.28 |