Skip to content

Commit a7a99f2

Browse files
committed
[Gold V] Title: 머리 톡톡, Time: 1028 ms, Memory: 54584 KB -BaekjoonHub
1 parent 12e2a54 commit a7a99f2

2 files changed

Lines changed: 97 additions & 0 deletions

File tree

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# [Gold V] 머리 톡톡 - 1241
2+
3+
[문제 링크](https://www.acmicpc.net/problem/1241)
4+
5+
### 성능 요약
6+
7+
메모리: 54584 KB, 시간: 1028 ms
8+
9+
### 분류
10+
11+
수학, 정수론, 조화수
12+
13+
### 제출 일자
14+
15+
2025년 6월 3일 23:23:32
16+
17+
### 문제 설명
18+
19+
<p>엄지 생일 기념으로 학생들은 파티를 하고 있다. 엄지는 N(1≤N≤100,000)명의 학생에게 1부터 N번까지 차례대로 번호를 부여하였고 그들을 순서대로 빙 둘러앉아 원을 만들게 하였다. (즉 i번째 학생은 i-1과 i+1학생 사이에 앉아있다. 단, N번째 학생은 N-1번째 학생과 첫 번째 학생 사이에 앉아있다.)</p>
20+
<p>N명의 학생은 둘러앉아 "머리톡톡" 게임을 하려한다. 게임 규칙은 다음과 같다. 각각의 학생은 자신의 머리 위에 1,000,000 이하의 자연수 중 하나를 쓴다. 그리고 1번부터 N번 학생까지 한 명씩 차례대로 일어나 원을 돌면서 자신이 쓴 숫자가 다른 사람이 쓴 숫자의 배수이면 그 학생의 머리를 "톡톡" 친다.</p>
21+
<p>문제는 각각의 학생이 일어나 자신의 자리로 돌아올 때까지 총 몇 명의 학생의 머리를 치는지 구하는 것이다.</p>
22+
23+
### 입력
24+
25+
<p>첫째 줄에 학생의 수 N이 입력되고 다음 N개의 줄에는 1번부터 N번까지 각각의 학생이 자신의 머리에 쓴 숫자를 입력받는다.</p>
26+
27+
### 출력
28+
29+
<p>총 N개의 줄로 i번째 줄에는 i번째 학생이 한 바퀴를 돌면서 머리를 친 학생의 수를 출력한다.</p>
30+
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
import java.io.BufferedReader;
2+
import java.io.IOException;
3+
import java.io.InputStreamReader;
4+
import java.time.LocalTime;
5+
import java.time.format.DateTimeFormatter;
6+
import java.util.ArrayList;
7+
import java.util.Arrays;
8+
import java.util.Comparator;
9+
import java.util.HashMap;
10+
import java.util.LinkedList;
11+
import java.util.List;
12+
import java.util.Map;
13+
import java.util.PriorityQueue;
14+
import java.util.Queue;
15+
import java.util.Stack;
16+
import java.util.StringTokenizer;
17+
18+
public class Main {
19+
20+
public static void main(String[] args) throws IOException{
21+
22+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
23+
24+
int N= Integer.parseInt(br.readLine());
25+
26+
int arr[] = new int[N];
27+
28+
Map<Integer, Integer> map = new HashMap<>();
29+
for(int i =0 ; i<N; i++) {
30+
arr[i] = Integer.parseInt(br.readLine());
31+
map.put(arr[i], map.getOrDefault(arr[i], 0) +1);
32+
}
33+
34+
int answer[] = new int[N];
35+
36+
37+
38+
39+
for(int i =0; i<N ;i++) {
40+
int cur = arr[i];
41+
int sq = (int) Math.sqrt(cur);
42+
if(sq*sq == cur) {
43+
answer[i] = -map.getOrDefault(sq, 0);
44+
} else {
45+
answer[i] = 0;
46+
}
47+
48+
for(int j = 1; j<=sq; j++) {
49+
if(cur%j !=0) {
50+
continue;
51+
}
52+
answer[i] += map.getOrDefault(j, 0) + map.getOrDefault(cur/j, 0);
53+
}
54+
}
55+
56+
for(int i =0; i<N; i++) {
57+
System.out.println(answer[i]-1);
58+
}
59+
60+
61+
}
62+
/*
63+
1 = 2
64+
2 = 1
65+
66+
*/
67+
}

0 commit comments

Comments
 (0)