조건문에 의한 시간초과
293
작성한 질문수 1
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의 성능 차이가 크게 나타날 수 있는 상황은 대량의 데이터 처리나 반복문 내 빈번한 조건 체크 등 특정 조건에서만 발생합니다. 문제의 근본적인 원인을 해결하기 위해서는 전체적인 알고리즘의 효율성을 고려해야 합니다.
코딩 테스트를 준비하시며 더 좋은 성과를 내실 수 있기를 바라며, 추가적으로 궁금한 점이 있다면 언제든 질문 주세요.
안녕하세요. 바뀐 채점사이트 관련해서 문의드립니다.
0
27
1
갑자기 채점 사이트가 바뀌었어요
0
32
1
문제 리스트 페이지
0
27
1
채점 사이트 관련 질문드립니다
0
23
1
봉우리 문제 질문입니다
0
81
2
씨름 선수 문제에서 각 선수의 몸무게나 키가 같을 수도 있다면?
0
64
0
이 코드랑 영상 코드중에 뭐가 더 좋은 코드인가요?
0
72
0
가중치 방향 그래프에서 가중치가 0인 간선을 표현하는 방법
0
67
1
좌표 정렬 문제 이 코드가 왜 틀린지 모르겠습니다 ㅠㅠ
0
85
2
6-7 강의에서
0
48
1
6-6. 장난꾸러기 질문 있습니다.
0
45
1
강의 수강후 코딩테스트
0
109
1
answer 변수 사용 여부
0
44
1
2중 for문
1
85
2
2-11. 임시반장정하기 (Runtime Error)
0
63
1
혹시 LinkedList 같은 자료 구조들은 따로 배우지 않나요?
0
70
1
이런 풀이는 어떨까요
0
43
1
자바 스트림 방식의 효율성 질문 드립니다.
0
57
1
알고리즘 자료 구조들..
0
62
1
StringBuilder vs BufferdWriter
0
48
1
원더랜드(프림)
0
50
1
이런 코드는 어떤가요?
0
61
1
bfs 풀이
0
57
1
병합정렬
0
56
1





