티스토리 뷰

Algorithm

[백준] S2 18870 좌표 압축 (java)

코딩브론즈 2021. 1. 17. 11:33

www.acmicpc.net/problem/18870

 

18870번: 좌표 압축

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

www.acmicpc.net

 

 

풀이

 

1) 원본 배열, 정렬된 배열을 생성

2) 정렬된 배열 탐색. 한번도 들어오지 않은 값이면 맵에 넣는다 value는 넣을때마다 1씩 증가

3) 원본 배열 탐색. 맵으로 BufferedWriter에 담음

4) 출력 

 

주의사항

 

1) x

 

package com.baekJoon;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.StringReader;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
import java.util.StringTokenizer;

public class BJ_S2_18870_좌표압축 {
	static BufferedReader input = new BufferedReader(new InputStreamReader(System.in));
	static BufferedWriter output = new BufferedWriter(new OutputStreamWriter(System.out));
	static StringTokenizer tokens;
	static int N;
	static long arr[], copy[];
	static Map<Long, Integer> map = new HashMap<>();
	public static void main(String[] args) throws NumberFormatException, IOException {
		input = new BufferedReader(new StringReader(src));
		N = Integer.parseInt(input.readLine());
		arr = new long [N];
		copy = new long [N];
		tokens  = new StringTokenizer(input.readLine());
		for(int i=0; i<N; i++) {
			long num = Integer.parseInt(tokens.nextToken());
			arr[i] = num;
			copy[i] = num;
		}
		Arrays.sort(copy);
		
		int cnt = 0;
		for(int i=0; i<N; i++) {
			if(map.get(copy[i]) == null) {
				map.put(copy[i], cnt++);
			}
		}
		for(int i=0; i<N; i++) {
			output.append(map.get(arr[i])+" ");
		}
		output.close();
	}
	static String src =
			"6\r\n" + 
			"1000 999 1000 999 1000 999";
}

 

 

풀이

 

 정렬과 Map 자료구조만 알면 쉽게 풀 수 있는 문제. 특별히 배운점은 없다.

공지사항
최근에 올라온 글
최근에 달린 댓글
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
글 보관함