[BOJ/백준/C++] 18870번 좌표 압축

2024. 1. 27. 00:05·Coding Test/Baekjoon
728x90
반응형
 

18870번: 좌표 압축

수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표 Xj의 개수와 같아야 한다. X1, X2, ..., XN에

www.acmicpc.net


 

📌 접근 방법

⚡ 좌표 압축 : 해당 좌표의 값을 그 값보다 작은 좌표값들의 개수로 대체

  • N 개의 숫자를 입력받고 오름차순으로 정렬해준다
  • 중복을 제거해주고 뒤에 필요없는 값들은 제거 해줌 (중복제거를 한 후 벡터 앞부터 다시 채운거라 뒤에는 쓰레기 값들이 남아있음)
  • lower_bound 함수를 이용해서 찾는 값보다 같거나 큰 값을 리턴해줌.

 

✔ unique(b, e)

  • <algorithm> 헤더파일 사용
  • vector의 begin, end을 넣어주고 "==" 연산자를 이용해 원소들이 같은지 비교
  • vector 배열에서 중복되지 않는 원소들을 앞에서부터 채워나가는 함수
    • 나머지 값들(필요없는 값)은 그대로 vector 원소 값이 존재함
    • erase와 함께 자주 쓰임 (뒤에 남은 값들 제거)
  • 정렬된 상태로 진행해야 함
  • 시간 복잡도 O(n)

✔ lower_bound 

  • 이진탐색기반.
  • 해당 값보다 크거나 같은값이 제일 처음 등장하는 곳 위치를 리턴해준다

 

 

 

✅  Pass Code

#include<iostream>
#include<string>
#include<cmath>
#include<algorithm>
#include<vector>
using namespace std;


int main()
{
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int N;
    cin>>N;

    vector<int> v;

    for(int i=0; i<N; i++){
        int x;
        cin>>x;
        v.emplace_back(x); 
    }
    
    vector <int> tmp=v;
    sort(tmp.begin(), tmp.end()); //정렬해줌
    tmp.erase(unique(tmp.begin(), tmp.end()), tmp.end()); // 중복을 제거하고 resize해줌

    for(auto&& x : v){
        cout<<lower_bound(tmp.begin(), tmp.end(), x)-tmp.begin()<<' '; // x보다 작은 수가 몇 개 있는지(중복 제외) 찾기위해 앞에서 중복을 제거하고 정렬된 새로운 벡터의 원소 순서를 이용해 출력
    } 
    cout<<"\n";
    return 0;
}

 

 

728x90
반응형
저작자표시 비영리 변경금지 (새창열림)

'Coding Test > Baekjoon' 카테고리의 다른 글

[BOJ/백준/C++] 7785번 회사에 있는 사람  (2) 2024.01.27
[BOJ/백준/C++] 11478번 서로 다른 부분 문자열의 개수  (0) 2024.01.27
[BOJ/백준/C++] 1269번 대칭 차집합  (0) 2024.01.27
[BOJ/백준/C++] 1181번 단어 정렬  (1) 2024.01.27
[BOJ/백준/C++] 1436번 영화감독 숌  (2) 2024.01.26
'Coding Test/Baekjoon' 카테고리의 다른 글
  • [BOJ/백준/C++] 7785번 회사에 있는 사람
  • [BOJ/백준/C++] 11478번 서로 다른 부분 문자열의 개수
  • [BOJ/백준/C++] 1269번 대칭 차집합
  • [BOJ/백준/C++] 1181번 단어 정렬
예롱메롱
예롱메롱
  • 예롱메롱
    예롱이의 개발 블로그
    예롱메롱
  • 전체
    오늘
    어제
    • 전체보기 (274)
      • 프로젝트 (35)
        • Wedle (12)
        • 인스타그램 클론 코딩 (13)
        • 스프링 부트와 AWS로 혼자 구현하는 웹 서비스 (10)
      • 인프런 Spring 강의 정리 (79)
        • 스프링 입문 - 코드로 배우는 스프링 부트, 웹 .. (7)
        • Spring 핵심 원리 - 기본편 (9)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (8)
        • 자바 ORM 표준 JPA 프로그래밍 - 기본편 (11)
        • 실전! 스프링 부트와 JPA 활용1 - 웹 애플리.. (6)
        • 실전! 스프링 부트와 JPA 활용2 - API 개.. (5)
        • 실전! 스프링 데이터 JPA (7)
        • 스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 (7)
        • 스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 (11)
        • 실전! Querydsl (8)
      • Cloud (3)
      • Spring (6)
        • spring boot (5)
        • 소셜로그인 (1)
      • Docker (2)
      • DevOps (0)
      • Coding Test (114)
        • Programmers (37)
        • Baekjoon (76)
      • KB It's Your Life 6기 (1)
      • CS (18)
        • 알고리즘 (13)
        • 컴퓨터 구조 (1)
        • Operating System (0)
        • Network (0)
        • Database (4)
      • git (1)
      • Language (15)
        • Java (5)
        • C++ (6)
        • Python (4)
    • GITHUB GITHUB
    • INSTAGRAM INSTAGRAM
  • hELLO· Designed By정상우.v4.10.3
예롱메롱
[BOJ/백준/C++] 18870번 좌표 압축
상단으로

티스토리툴바