풀이방법 및 문제점
2022.03.21
주어진 수열을 오름차순 정렬한 뒤,
정렬된 주어진 수열에 포함된 가장 긴 연속하는 수열을 찾아서,
그 수열의 길이가 5 이상이라면 0을 출력하고, 5 미만이라면 5에서 해당 수열의 길이를 뺀 값을 출력하였다.
그러나, 이렇게 하면
1 2 3
위와 같은 연속되는 수열이 있을 때에는 2를 잘 출력하지만
1 3 5
위와 같은 경우를 캐치하지 못한다. 2, 4를 넣으면 연속되는 길이 5의 수열이 될 수 있다는 것을 알아내고 2를 출력해야 하는데, 그냥 무의미한 수들로 판단해버리기 때문이다.
저렇게 띄엄띄엄 연속되는 경우를 어떻게 해야 잡아낼 수 있을까?
알고리즘 분류에 투 포인터가 있던데 그걸 힌트 삼아서 잘 생각해봐야겠다.
2022.03.23
해결되었다.
코드
Java(2022.03.21)
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Main {
public static void main(String[] args) throws IOException{
// TODO Auto-generated method stub
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(br.readLine());
int[] arr = new int[n];
for(int i = 0; i< n;i++) {
arr[i] = Integer.parseInt(br.readLine());
}
Arrays.sort(arr);
int cnt = 1;
int max_cnt = 1;
for(int i = 1; i<n; i++) {
if(arr[i] - arr[i-1] == 1) {
cnt++;
max_cnt = Math.max(cnt, max_cnt);
}
else cnt = 1;
}
if(max_cnt>=5)System.out.print(0);
else System.out.print(5-max_cnt);
}
}
'알고리즘 문제풀이 > 백준-오답노트' 카테고리의 다른 글
오답노트 #10250 : ACM 호텔 (0) | 2022.04.06 |
---|---|
오답노트 #1620 : 나는야 포켓몬 마스터 이다솜 (0) | 2022.03.27 |
오답노트 #9177 : 단어 섞기 (0) | 2022.02.22 |
오답노트 #1931 : 회의실 배정 (0) | 2022.02.14 |
오답노트 #15681 : 트리와 쿼리 (0) | 2022.02.13 |