Codility 4.1 FrogRiverOne
문제
- FrogRiverOne
- 배열
A
와 정수X
가 주어진다. - 배열
A
에는 각 초(index)마다 떨어지는 나뭇잎의 위치가 저장되어 있다.- ex)
A
가[3,1,2,5,4]
일 경우, 0초에는 3의 위치에 나뭇잎이, 1초에는 1의 위치에 나뭇잎이 떨어진다 ...
- ex)
- 개구리가 1에서
X
까지 이동하는 데에 걸리는 최소 시간을 구하는 문제이다. - 즉, 배열을 순회하며
1~X
까지의 모든 수가 나타나는 최소 index를 구하면 된다.
풀이
import java.util.HashSet;
class Solution {
public int solution(int X, int[] A) {
HashSet set = new HashSet();
for (int ii = 0; ii < A.length; ii ++) {
if (!set.contains(A[ii]) && A[ii] <= X) {
set.add(A[ii]);
}
if (set.size() == X) return ii;
}
return -1;
}
}
- HashSet을 사용하여 해결했다.
- HashSet의 부모 클래스인 Set은 중복저장을 허용하지 않으며, add, contains에 O(1)이 걸리기 때문에 문제에 매우 적합한 자료 구조였다.
- 따라서
1~X
사이의 수이며 아직 set에 없는 수를 계속 add하고, set의 크기가 X와 같아지면(1~X
구간의 모든 수가 set에 저장되면) index를 반환하게 하였다. - 만약 배열을 모두 순회해도
1~X
의 모든 수가 set에 저장되지 않았을 경우, -1을 반환하게 하였다.
Author And Source
이 문제에 관하여(Codility 4.1 FrogRiverOne), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@noneobj/Codility-4.1-FrogRiverOne저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)