작성
·
25
·
수정됨
0
package com.lee.blog;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
long X = Long.parseLong(st.nextToken());
long[] arr = new long[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arr[i] = Long.parseLong(st.nextToken());
}
Arrays.sort(arr);
int start = 0;
int end = N - 1;
int count = 0;
int remain = 0;
while (start < end) {
if (arr[end] == X) {
end--;
remain++;
continue;
}
if (arr[start] + arr[end] >= X / 2 + 1) {
start++;
end--;
count++;
} else {
start++;
}
}
remain += N - (count * 2 + remain);
System.out.println(count + remain / 3);
}
}
이렇게 작성했는데 어느 부분에서 틀린걸까요 ㅠㅠ?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
이신성님, 백준 22988번 문제를 해결하려 하신 코드에서 몇 가지 검토해보면 좋을 부분이 있습니다. 다음을 확인해보세요:
배열의 정렬 및 접근: 현재 arr[start]
와 arr[end]
요소를 사용하여 합을 구하고 있습니다. 문제에 따라 다를 수 있지만, arr[start] + arr[end]
가 X
를 넘는 경우에도 처리 로직이 추가될 수 있습니다. 또한 arr[end] == X
로 조건을 체크하고 있는데, X
로 arr[end]
값과 비교한 후 continue
로 반복문을 빠져나오기 전에 다른 조건들을 더 확인할 필요가 있습니다.
분기 로직: X / 2 + 1
로 부분적으로 나누고 있는데, 이 조건이 문제의 핵심 조건에 충실한지 확인해보세요. 문제에서 요구하는 조건이 무엇인지 명확히 파악하시고, 그에 맞도록 로직을 조정하는 것이 필요합니다.
결과 계산: 최종적으로 count + remain / 3
이라는 결과 값을 반환하고인데, 몫 연산을 의도하신 것인지 확인해 보세요. remain
값을 3으로 나눈 결과가 정확한지, 다른 계산이 필요한지 확인이 필요합니다.
전체합로직: remain += N - (count * 2 + remain);
부분의 역할을 정확히 이해하고 있는지 점검하고, 이 부분이 필요한지 다시 한번 확인하세요.
필요시 문제의 상세 요구사항을 다시 읽고, 위의 내용을 고려하며 코드를 수정해보시는 것을 추천드립니다! 코드를 디버깅하며 변수의 값 변화를 추적해보는 것도 도움이 될 것입니다. 또한, 경우에 따라 다른 솔루션 방법론을 생각해보시는 것도 경험을 늘리는 좋은 방법이 될 수 있습니다. 필요한 경우 온라인 저지 및 스니펫 코드 분석기를 사용하여 코드를 테스트하는 게 도움이 될 수 있습니다.
응원합니다! 🔥