
문제 링크
https://www.acmicpc.net/problem/27172
접근 방법
각 카드 번호를 기준으로 배수 관계에 있는 다른 카드들과의 관계를 탐색합니다.
자신의 배수인 수가 다른 카드에 존재하면 +1점, 자신이 누군가의 배수이면 -1점 처리합니다.
배열 score를 사용해 모든 카드의 점수를 기록한 뒤 출력합니다.
소스 코드
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.*;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
StringTokenizer st = new StringTokenizer(br.readLine());
int[] card = new int[n], sortCard = new int[n];
for (int i = 0; i < n; i++) {
card[i] = sortCard[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(sortCard);
int max = sortCard[n - 1] + 1;
int[] score = new int[max];
boolean[] isNum = new boolean[max];
for (int i = 0; i < sortCard.length; i++) {
isNum[sortCard[i]] = true;
}
for (int i = 0; i < n; i++) {
for (int j = sortCard[i] * 2; j < max; j += sortCard[i]) {
if (isNum[j]) {
--score[j];
++score[sortCard[i]];
}
}
}
StringBuilder sb = new StringBuilder();
for (int i = 0; i < n; i++) {
sb.append(score[card[i]]).append(" ");
}
System.out.println(sb);
}
}
코드 설명
isNum[x]는 입력된 카드 중 숫자 x가 있는지를 나타냅니다.
자신이 이기는 경우: score[자신]++
자신이 지는 경우: score[상대]--
배수 관계를 빠르게 탐색하여 점수를 기록하고, 각 카드에 대해 최종 점수를 출력합니다.
'코딩테스트 > 백준' 카테고리의 다른 글
| [백준 JAVA] 15683. 감시 (0) | 2025.07.21 |
|---|---|
| [백준 JAVA] 4779. 칸토어 집합 (0) | 2025.07.18 |
| [백준 JAVA] 24060. 알고리즘 수업 - 병합 정렬 1 (0) | 2025.07.10 |
| [백준 JAVA] 15686. 치킨 배달 (0) | 2025.07.04 |
| [백준 JAVA] 24511. queuestack (0) | 2025.07.02 |