본문 바로가기
카테고리 없음

B18870 : 좌표 압축

by 뚱키 2022. 2. 12.
728x90
난이도 Silver 2
링크 https://www.acmicpc.net/problem/18870


풀이.

사실 문제 이해를 못하고 입출력 결과를 보고 어떤 식으로 풀면 되겠다 라고 느낀 문제

느낌이 딱 sort하고 순서대로 index 넣어주면 되겠다 싶었다.


소스코드.

public class B18870 {

	public static void main(String[] args)throws IOException {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		
		int N=Integer.parseInt(br.readLine());
		
		StringTokenizer stz=new StringTokenizer(br.readLine());
		
		int[] arr=new int[N];
		
		for(int i=0;i<N;i++) {
			arr[i]=Integer.parseInt(stz.nextToken());
		}
		int[] mirror=arr.clone();
		Arrays.parallelSort(mirror);
		
		// -10 -9 2 2 4
		HashMap<Integer, Integer> map=new HashMap<Integer, Integer>();
		
		int index=0;
		for(int i=0;i<N;i++) {
			if(!map.containsKey(mirror[i])) {
				map.put(mirror[i], index++);
				
			}
			
		}
		StringBuilder sb=new StringBuilder();
		for(int i=0;i<N;i++) {
			
			sb.append(map.get(arr[i])).append(" ");
		}
		System.out.println(sb.toString());
		
		
		
	}

}

 

참고로 StringBuilder 혹은 BufferedWriter를 사용하지 않으면 시간초과가 나오니 주의!


후기.

문제가 짧은 경우. 이해가 어려운 경우가 있다.

이럴 경우 당황하지 말고 input과 output의 관계를 생각해서 문제를 다시 한 번 읽어보자.

 

728x90

댓글