백준 18870번 문제는 정렬에 관한 문제이다.
문제
문제를 이해하는데 상당한 시간이 걸렸다. 결국 문제를 이해하지 못했고 구글에 검색해서 찾아보고 난 후 이해하게 되었다.
문제는 결국 Xi의 좌표 보다 작은 Xj 좌표가 몇개가 있는지 물어보는 문제였다.
밑에 예제를 보면서 생각해보면 첫 번째 좌표 Xi로 2가 주어진다면 다른 좌표에서 Xi보다 작은 좌표를 찾게 되고 해당 좌표보다 작은 값으로 -10과 -9가 있다는 것을 알 수 있다. 따라서 Xi가 2인 좌표를 압축하면 2가 나오게 되는 것이다.
입력 & 출력
풀이
먼저 정수 N을 선언하여 명령어를 받아주고 좌표를 받아 줄 M, K 배열을 만들어준다.
HashMap을 사용하여 처리를 하기 위해서 HashMap을 선언해준다.
명령어의 숫자만큼 K와 M 배열에 값을 삽입해준다.
K와 M 두 개의 배열을 만든 이유로는 K 배열은 정렬하여 hashMap에 넣어주고 M 배열과 비교하여 값을 받기 위해 2개를 만든다.
Arrays.sort를 사용하여 K 배열을 정렬한다.
각 배열마다 순위를 정해줄 rank를 초기화한다.
for문을 사용하여 hashMap에 K 배열의 각 원소마다 rank를 부여해준다.
마지막으로 for문을 통해서 M 배열을 돌며 key 값에 맞는 rank 값을 받아서 StringBuilder에 추가하고 출력해준다.
'알고리즘 공부' 카테고리의 다른 글
자바 백준_실버5 - 25206번 (0) | 2023.10.06 |
---|---|
백준 실버3 2346번(자바) (0) | 2023.09.07 |
백준 실버5 11866번(자바) (0) | 2023.09.04 |
백준 실버4 18258번(자바) (0) | 2023.09.04 |
백준 실버4 12789번(자바) (2) | 2023.09.04 |