작성
·
231
·
수정됨
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
의 성능 차이가 크게 나타날 수 있는 상황은 대량의 데이터 처리나 반복문 내 빈번한 조건 체크 등 특정 조건에서만 발생합니다. 문제의 근본적인 원인을 해결하기 위해서는 전체적인 알고리즘의 효율성을 고려해야 합니다.
코딩 테스트를 준비하시며 더 좋은 성과를 내실 수 있기를 바라며, 추가적으로 궁금한 점이 있다면 언제든 질문 주세요.