https://softeer.ai/practice/7628
문제 풀이 방법
입력 처리 및 데이터 저장
- 첫 번째 줄에서 정수 n을 입력받습니다. 이는 집의 수를 나타냅니다.
- 두 번째 줄에서 n개의 정수를 입력받아 house 배열에 저장합니다. 이 배열은 각 집의 특정 값을 나타냅니다.
- 입력받은 house 배열을 오름차순으로 정렬합니다.
가능한 난로 반지름 탐색 및 계산
- 변수 answer를 0으로 초기화합니다. 이는 가장 많은 집이 공유할 수 있는 난로 반지름을 찾기 위한 변수입니다.
- 난로의 가능한 반지름을 2부터 가장 큰 집의 값 (house[n - 1])까지 반복합니다:
- 각 난로 반지름 j에 대해 변수 current를 0으로 초기화합니다. 이는 현재 반지름으로 난로를 공유할 수 있는 집의 수를 세기 위한 변수입니다.
- 모든 집에 대해 반복하면서 (k를 0부터 n-1까지): 만약 house[k] % j == 0이면, 즉 집의 값이 난로 반지름 j로 나누어 떨어진다면 current를 1 증가시킵니다.
- 현재 current 값이 기존의 최대값 answer보다 크다면, answer를 current로 업데이트합니다.
결과 출력
- 모든 가능한 난로 반지름에 대한 검사가 끝나면, 최종적으로 가장 많은 집이 공유할 수 있는 난로 반지름에 해당하는 집의 수 answer를 출력합니다.
핵심 아이디어
- 공통 난로 반지름 찾기: 각 집의 값에 대해 공통으로 나누어 떨어지는 난로 반지름을 찾습니다. 이는 집들이 동일한 난로 반지름을 사용할 수 있는지를 판단하는 기준이 됩니다.
- 최대 집의 수 계산: 가능한 모든 난로 반지름에 대해 나누어 떨어지는 집의 수를 계산하고, 그 중 가장 큰 값을 선택하여 answer에 저장합니다.
코드
import java.io.*;
import java.util.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(in.readLine());
int n = Integer.parseInt(st.nextToken());
int[] house = new int[n];
st = new StringTokenizer(in.readLine());
for(int i = 0; i < n; i++){
house[i] = Integer.parseInt(st.nextToken());
}
Arrays.sort(house);
int answer = 0;
int current;
for(int j = 2; j <= house[n - 1]; j++){
current = 0;
for(int k = 0; k < n; k++){
if(house[k] % j == 0){
current++;
}
}
if(current > answer){
answer = current;
}
}
System.out.println(answer);
}
}
'Development > PS' 카테고리의 다른 글
[Array] Softeer(소프티어) level 3 우물 안 개구리 Java 풀이 (0) | 2024.01.31 |
---|---|
[Greedy] Softeer(소프티어) level 2 진정한 효도 Java 풀이 (0) | 2024.01.31 |
[Greedy] Softeer(소프티어) level 3 강의실 배정 java 풀이 (+Comparator에 관하여) (1) | 2024.01.29 |
[DP] Softeer(소프티어) level 3 징검다리 Java 풀이 (+ 테스트 케이스) (0) | 2024.01.27 |
[Array] Softeer level 3 성적 평균 Java 풀이 (%.2f는 자동 반올림!!) (1) | 2024.01.24 |