
-Code
import java.io.*;
import java.util.*;
public class BOJ27487 {
public static void main(String[] args) throws IOException {
BufferedReader br =
new BufferedReader(new InputStreamReader(System.in));
int t = Integer.parseInt(br.readLine());
for (int i = 0; i < t; i++) {
int n = Integer.parseInt(br.readLine());
// nums 초기화
int[] nums = new int[n];
StringTokenizer st = new StringTokenizer(br.readLine());
for (int j = 0; j < n; j++) {
nums[j] = Integer.parseInt(st.nextToken());
}
// 계산 로직
int answer = solution(nums, n);
System.out.println(answer);
}
}
// 1은 곱해도 자기 자신이므로 2만 세서 계산
private static int solution(int[] nums, int size) {
// 2 갯수 새기
int totalTwoCnt = 0;
for (int num : nums) {
if (num == 2) totalTwoCnt++;
}
// 2의 갯수가 홀수면 반으로 나눌 수 없어서 -1
if (totalTwoCnt % 2 == 1) return -1;
// 2의 갯수가 0이면 처음부터 가능하므로 1 반환
if (totalTwoCnt == 0) return 1;
// 둘다 아닌 경우 2의 총 갯수의 반절되는 구간을 반환하면 됨
int twoCnt = 0;
for (int i = 0; i < size; i++) {
if (nums[i] == 2) {
twoCnt++;
if (twoCnt == totalTwoCnt / 2) {
return i + 1;
}
}
}
return -1;
}
}
처음에는 1, 2가 아니라 범위가 더 넓은 값인 줄 알고 누적곱을 활용해 풀었습니다. 하지만 입력이 1, 2만 주어지고 배열의 크기가 1000까지 기 때문에 값이 끝까지 가면 2^1000까지 가서 범위를 벗어나게 되어 틀렸습니다. 1, 2가 주어진 것과 2의 개수를 계산해서 풀어라 라는 힌트를 받고 총개수를 2로 나눈 값과 같으면 왼쪽과 오른쪽의 각 누적 곱이 같아지기 때문에 그 로직을 사용해 해결했습니다.
'Beakjoon&프로그래머스 > Java' 카테고리의 다른 글
| [LeetCode/Java] Increasing Triplet Subsequence (0) | 2026.01.01 |
|---|---|
| [LeetCode/Java] Reverse Linked List (0) | 2026.01.01 |
| [LeetCode/Java] Product of Array Except Self (0) | 2025.12.31 |
| [LeetCode/Java] Min Cost Climbing Stairs (0) | 2025.12.31 |
| [LeetCode/Java] N-th Tribonacci Number (0) | 2025.12.31 |