초기 문제 접근
- 일단 문제 이해부터가 어려워서 질문 게시판을 찾아보니,그냥 이 배열 중 자기보다 낮은 원소의 개수를 출력하는 것 이었음
- 근데 최대 N이 1,000,000 이니까 이중 for 문 쓰면 무조건 터질 것 같음
- 정렬하고 하나하나 비교하나..?
- 조금 찾아보니 이진 탐색을 사용하면 된다고 나와있음
GPT의 문제 접근
- 하지만 단순히 Map 사용으로 문제를 해결할 수 있었음
- 각 순위를 표시할 rank = 0을 선언함
- 정렬한 배열을 첫 번째 인덱스부터 순회함
- Map 안에 현재 순회하는 값이 없다면 새로 삽입 후 rank++
- 결과적으로 숫자 별로 순위가 Map에 저장이 됨
코드
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
public class Main {
static int N;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
N = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] original = new int[N];
int[] sorted = new int[N];
for (int i = 0; i < N; i++) {
original[i] = Integer.parseInt(st.nextToken());
sorted[i] = original[i];
}
Arrays.sort(sorted);
Map<Integer, Integer> compressionMap = new HashMap<>();
int rank = 0;
for (int i = 0; i < N; i++) {
if (!compressionMap.containsKey(sorted[i])) {
compressionMap.put(sorted[i], rank++);
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
sb.append(compressionMap.get(original[i])).append(" ");
}
System.out.println(sb);
}
}
'Development > PS' 카테고리의 다른 글
[PS] 프로그래머스 level 2 마법의 엘레베이터 java 풀이 (1) | 2024.10.07 |
---|---|
[PS] 백준 14940 쉬운 최단거리 java 풀이 (자꾸 3%에서 틀리네) (0) | 2024.09.29 |
[PS] 백준 가장 긴 바이토닉 부분 수열 java 풀이 (0) | 2024.09.21 |
[PS] 백준 1766 문제집 java 풀이 (0) | 2024.09.10 |
[PS] 백준 영화감독 숌 java 풀이 (3) | 2024.09.04 |