코테/백준

[백준/JAVA] 18870번: 좌표 압축

imname1am 2023. 3. 22. 11:43
반응형

🔺 문제

 

18870번: 좌표 압축

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

www.acmicpc.net

 

🔺 코드

- 시간 초과 풀이

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException {
	    var br = new BufferedReader(new InputStreamReader(System.in));
	    
	    int n = Integer.parseInt(br.readLine());
	    int[] arr = new int[n];
	    
	    var st = new StringTokenizer(br.readLine(), " ");	    
	    for(int i=0 ; i < n ; i++) {
	        arr[i] = Integer.parseInt(st.nextToken());
	    }
        
        int[] cnt = new int [n];
        for(int i=0 ; i < n ; i++) {
            for(int j=0 ; j < n ; j++) {
                if(i!=j && arr[i] > arr[j])
                    cnt[i]++;
            }
        }
        
        for(int i : cnt) {
            System.out.print(i + " ");
        }
	}
}

중복을 생각하지 못 해 답을 틀림ㅎ

 

 

- 정답

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String[] args) throws IOException {
	    var br = new BufferedReader(new InputStreamReader(System.in));
	    
	    int n = Integer.parseInt(br.readLine());
	    int[] origin = new int[n];
	    
	    var st = new StringTokenizer(br.readLine(), " ");	    
	    for(int i=0 ; i < n ; i++) {
	        origin[i] = Integer.parseInt(st.nextToken());
	    }
	    
	    int[] sorted = origin.clone();
	    Arrays.sort(sorted);
        
	    HashMap<Integer, Integer> map = new HashMap<>();
	    int rank = 0;        
	    for(int i=0 ; i < n ; i++) {
	        if(!map.containsKey(sorted[i]))
	            map.put(sorted[i], rank++);
        }
        
        var sb = new StringBuilder();
        for(int i : origin) {
            sb.append(map.get(i)).append(' ');
        }
        
        System.out.println(sb);
	}
}
✅ 해결 아이디어
- 좌표 압축 : 각 원소의 순위를 매기는 문제
- Map 사용해 <좌표값, 좌표값의 최소 인덱스> 저장 (HashMap - 중복 제거)

- map에 이미 존재하는 좌표라면 무시. 아니라면 좌표값과 순위 저장

 


(참고)

✔ 풀이

 

[백준] 18870번 : 좌표 압축 - JAVA [자바]

https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다

st-lab.tistory.com

 

 

[백준] 18870번: 좌표 압축 - JAVA

🔗 문제 링크 BOJ 18870번: 좌표 압축 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서

girawhale.tistory.com

 

 

[백준알고리즘-JAVA]18870번 풀이(좌표 압축) - 초보도 이해하는 풀이

안녕하세요 인포돈 입니다. 백준 알고리즘 18870번 풀이입니다. * 참고사항 - 개발환경은 eclipse을 기준으로 작성되었습니다. - java언어를 이용하여 문제를 풀이합니다. - 알고리즘 문제는 풀이를

infodon.tistory.com

 

반응형