본문 바로가기

알고리즘/백준

[백준] 18870 - 좌표 압축 (JAVA/ 자바)

반응형

18870번 문제(1)
18870번 문제(2)

 

 

처음에는 단순히 등수만 구하는 문제라고 생각했다.

문제를 풀긴 풀었는데 BufferedReader를 붙이고 StringBuilder를 쓰고 해도 시간초과가 나서 결국 다른 분들이 푼 방식을 보고 문제를 해결하였다...

 

❗️❗️ 틀린 코드

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class Main{
public static void main(String[] args)throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    int N = Integer.parseInt(br.readLine());
    int[] list = new int[N];
    int[] rank = new int[N];

    StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    for(int i=0; i<N; i++){
        list[i] = Integer.parseInt(st.nextToken());
    }

    while(true){
        for(int i=0; i<N; i++){
            rank[i] = 0;
            for(int j=0; j<N; j++){
                if(list[i] > list[j]){
                    rank[i] = rank[i]+1;
                }
            }
        }
        break;
    }
   for(int i=0; i<N; i++){
    System.out.print(rank[i] + " ");
   }
    br.close();
}
}

 

 

내가 참고한 블로그는 이쪽이다..

https://st-lab.tistory.com/279

 

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

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

st-lab.tistory.com

해결하지 못할 때마다 많은 도움을 받고있어 정말 감사한 분이다...

 

HashMap을 사용해서 등수를 매길 값들과 등수 값을 넣어서 해결하면 된다....

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.StringTokenizer;

public class Main{
public static void main(String[] args)throws IOException{
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    StringBuilder sb = new StringBuilder();
    int N = Integer.parseInt(br.readLine());
    int[] list = new int[N];
    int[] sorting = new int[N];
    HashMap <Integer, Integer> map = new HashMap<Integer, Integer>();

    StringTokenizer st = new StringTokenizer(br.readLine(), " ");
    for(int i=0; i<N; i++){
        list[i] = Integer.parseInt(st.nextToken());
        sorting[i] = list[i];
    }
    
    Arrays.sort(sorting);
    int rank = 0;
    for(int i : sorting){ 
        if(!map.containsKey(i)){
            map.put(i, rank);
            rank++;
        }
    }
   for(int i : list){
    int ans = map.get(i);
    sb.append(ans).append(' ');
   }
   System.out.println(sb);
    br.close();
}
}

 

점점 갈수록 난이도가 높아지니 어렵다....

반응형