티스토리 뷰

BOJ

[BOJ] 16496 큰 수 만들기

[gunwookim] 2021. 8. 15. 15:06

https://www.acmicpc.net/problem/16496

 

16496번: 큰 수 만들기

첫째 줄에 수의 개수 N(1 ≤ N ≤ 1,000)이 주어진다. 둘째 줄에는 리스트에 포함된 수가 주어진다. 수는 공백으로 구분되어져 있고, 1,000,000,000보다 작거나 같은 음이 아닌 정수 이다. 0을 제외한 나

www.acmicpc.net

\(N\)개의 수를 그리디적으로 적절히 정렬할려고 한다.

어떤 두 수 \(A\), \(B\) 에 대해 \(AB\)랑 \(BA\) 중에 더 크게 되도록 정렬을 해주면 된다.

만약, \(AB\) > \(BA\) 라면 \(A\), \(B\) 순으로 정렬해주면 되고, 

반대라면 \(B\), \(A\) 순으로 정렬해주면 된다.

 

자리수를 구할때 입력받은 수가 0인 경우에 0자리라고 구해지는 경우와, 모든 수가 0인 경우를 조심해야 한다.

총 시간복잡도는 \(O(NlogN)\)이다.

 

재채점으로 인해 틀렸습니다.

나중에 시간이 되면 다시 풀고 작성해보겠습니다.

 

#include <bits/stdc++.h>
#define x first
#define y second
#define pb push_back
#define all(v) v.begin(),v.end()
#pragma gcc optimize("O3")
#pragma gcc optimize("Ofast") 
#pragma gcc optimize("unroll-loops")
using namespace std;
const int INF = 1e9;
const int TMX = 1 << 18;
const long long llINF = 1e16;
const long long mod = 1e9+7;
const long long hashmod = 100003;
const int MAXN = 100000;
const int MAXM = 1000000;
typedef long long ll;
typedef long double ld;
typedef pair <int,int> pi;
typedef pair <ll,ll> pl;
typedef vector <int> vec;
typedef vector <pi> vecpi;
typedef long long ll;
int n;
ll a[1005];

bool cmp(ll x,ll y) {
    ll l1 = 10, l2 = 10;
    ll tx = x/10, ty = y/10;
    while(tx) {
        l1 *= 10;
        tx /= 10;
    }
    while(ty) {
        l2 *= 10;
        ty /= 10;
    }
    return x*l2+y > y*l1+x;
}

int main() {
    ios_base::sync_with_stdio(false); cin.tie(0);
    cin >> n;
    for(int i = 1;i <= n;i++) cin >> a[i];
    sort(a+1,a+n+1,cmp);
    if(!a[1]) cout << 0;
    else for(int i = 1;i <= n;i++) cout << a[i];
}

'BOJ' 카테고리의 다른 글

[BOJ] 2601 도서실카펫  (0) 2022.04.09
[BOJ] 17493 동아리 홍보하기  (0) 2021.08.15
[BOJ] 8146 Tetris Attack  (0) 2021.08.08
[BOJ] 6461 Hotel  (0) 2021.08.07
[BOJ] 18919 Allowed Swaps  (0) 2021.08.05
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함