인프런 커뮤니티 질문&답변
조건문에 의한 시간초과
작성
·
288
·
수정됨
0
package 인프런;
import java.io.*;
import java.util.*;
public class i0302 {
public static ArrayList<Integer> solution (int N, int M, int[] arrN, int[] arrM) {
ArrayList<Integer> answer = new ArrayList<>();
Arrays.sort(arrN);
Arrays.sort(arrM);
int p1 = 0;
int p2 = 0;
while(p1 < N && p2 < M) {
if (arrN[p1] == arrM[p2]) {
answer.add(arrN[p1]);
p1++;
p2++;
} else if (arrN[p1] > arrM[p2]) {
p2++;
} else if (arrN[p1] < arrM[p1]) {
p1++; // 여기가 문제
}
}
return answer;
}
public static void main(String[] args) throws Exception {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st;
st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int[] arrN = new int[N];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < N; i++) {
arrN[i] = Integer.parseInt(st.nextToken());
}
st = new StringTokenizer(br.readLine());
int M = Integer.parseInt(st.nextToken());
int[] arrM = new int[M];
st = new StringTokenizer(br.readLine());
for (int i = 0; i < M; i++) {
arrM[i] = Integer.parseInt(st.nextToken());
}
ArrayList<Integer> answer = solution(N, M, arrN, arrM);
for(int x: answer) {
System.out.print(x + " ");
}
}
}
안녕하세요. 강의 학습 전에 코드를 작성했는데 자꾸 시간초과가 나서 확인해보니 강사님 강의에서 14번째 라인(else p2++)를 저는 else if를 사용해서 나는 문제였던 것 같습니다.
마지막에 else if를 else로 바꾸는 것이 크리티컬하게 성능 차이를 낼 수 있는 것인가가 궁금합니다. 감사합니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
ti4884님의 질문에 답변 드리겠습니다.
코드의 14번째 라인에서 else if를 사용하는 대신 else를 사용하라는 조언을 받으셨군요. 실제로 이 조건문이 크리티컬한 성능 차이를 만들 수 있는지 여부에 대한 궁금증은 매우 타당합니다.
else if 대신 else를 사용하는 것은 한 가지 가능성에 대한 처리를 명시적으로 범위를 정하는 대신 나머지 모든 경우를 포괄하는 방식으로 바꾸는 것입니다. 주어진 상황에서 arrN[p1]과 arrM[p2]가 같지 않고 arrN[p1]이 arrM[p2]보다 크지 않다면, 마지막 남은 경우의 수는 arrN[p1]이 arrM[p2]보다 작은 것밖에 없습니다. 따라서 이 마지막 조건을 체크하기 위해 else if 대신 단순히 else를 사용하면 조건을 평가하는 데 걸리는 시간을 절약할 수 있습니다.
하지만, 일반적인 상황에서는 이러한 조건문 변경이 큰 성능 차이를 만들지는 않습니다. 그럼에도 불구하고, 매우 많은 데이터를 처리하거나, 반복문 내에서 수행되는 조건문에서 else if 대신 else를 사용하면, 그 반복의 횟수가 많을수록 성능 개선이 될 수 있습니다.
물론, 시간 초과의 주된 원인은 보통 알고리즘의 시간 복잡도와 관련이 있는 경우가 훨씬 많습니다. 주어진 코드에서 조건문의 최적화보다는 다른 부분에서의 개선이 필요할 수도 있습니다.
간단하게 말씀드리면, else와 else if의 성능 차이가 크게 나타날 수 있는 상황은 대량의 데이터 처리나 반복문 내 빈번한 조건 체크 등 특정 조건에서만 발생합니다. 문제의 근본적인 원인을 해결하기 위해서는 전체적인 알고리즘의 효율성을 고려해야 합니다.
코딩 테스트를 준비하시며 더 좋은 성과를 내실 수 있기를 바라며, 추가적으로 궁금한 점이 있다면 언제든 질문 주세요.





