Blog

B18870-좌표-압축

날짜 2024-04-06
사용 언어 Java
문제 유형 #coordinate_compression #sorting
문제 URL https://www.acmicpc.net/problem/18870
시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율
2 초 512 MB 92826 39119 29396 39.491%

나의 풀이 #

import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.ArrayList;  
import java.util.StringTokenizer;  
  
public class Main {  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
  
        // 1 ≤ N ≤ 1,000,000 -> long  
        long n = Long.parseLong(br.readLine());  
  
        StringTokenizer st = new StringTokenizer(br.readLine());  
        // -10^9 ≤ X ≤ 10^9 -> int  
        ArrayList<Integer> coordinates = new ArrayList<>();  
  
        int count = 0;  
        StringBuilder sb = new StringBuilder();  
        for (long l = 0; l < n; l++) {  
            int coordinate = Integer.parseInt(st.nextToken());  
  
            // 이미 리스트에 있는 좌표인지 확인  
            boolean isBigContain = false;  
            for (int i : coordinates) {  
                if (coordinate > i) {  
                    isBigContain = true;  
                    break;  
                }  
            }  
  
            if (isBigContain) {  
                count++;  
                sb.append(count).append(" ");  
            } else {  
                sb.append("0 ");  
            }

			coordinates.add(coordinate);
        }  
  
        System.out.println(sb);  
    }  
  
}
  • list에 담을 때 확인 하기 때문에 후에 들어온 값을 확인 x
import java.io.BufferedReader;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.util.ArrayList;  
import java.util.StringTokenizer;  
  
public class Main {  
    public static void main(String[] args) throws IOException {  
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));  
  
        // 1 ≤ N ≤ 1,000,000 -> long  
        long n = Long.parseLong(br.readLine());  
  
        StringTokenizer st = new StringTokenizer(br.readLine());  
        // -10^9 ≤ X ≤ 10^9 -> int  
        ArrayList<Integer> coordinates = new ArrayList<>();  
  
        StringBuilder sb = new StringBuilder();  
        for (long l = 0; l < n; l++) {  
            coordinates.add(Integer.parseInt(st.nextToken()));  
        }  
  
        // 중복 값 처리 필요  
        for (int coordinate : coordinates) {  
            // 더 작은 값이 몇 개 있는 지 확인  
            int count = 0;  
            for (int i : coordinates) {  
                if (coordinate > i) {  
                    count++;  
                }  
            }  
  
            sb.append(count).append(" ");  
        }  
  
        System.out.println(sb);  
    }  
  
}
  • 중복값 ex) 0 1 0 1 이 주어지면 0 2 0 2 와 같은 식으로 출력

실행결과

다른 사람의 풀이 #



관련개념 학습 #