문제 설명
길이가 n인 배열에 1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는지를 확인하려고 합니다.
1부터 n까지 숫자가 중복 없이 한 번씩 들어 있는 경우 true를, 아닌 경우 false를 반환하도록 함수 solution을 완성해주세요.
제한사항
배열의 길이는 10만 이하입니다.
배열의 원소는 0 이상 10만 이하인 정수입니다.
입출력 예
arr result
[4, 1, 3, 2] true
[4, 1, 3] false
입출력 예 설명
입출력 예 #1
입력이 [4, 1, 3, 2]가 주어진 경우, 배열의 길이가 4이므로 배열에는 1부터 4까지 숫자가 모두 들어 있어야 합니다. [4, 1, 3, 2]에는 1부터 4까지의 숫자가 모두 들어 있으므로 true를 반환하면 됩니다.
입출력 예 #2
[4, 1, 3]이 주어진 경우, 배열의 길이가 3이므로 배열에는 1부터 3까지 숫자가 모두 들어 있어야 합니다. [4, 1, 3]에는 2가 없고 4가 있으므로 false를 반환하면 됩니다.
내가 제출한 코드
import java.util.Arrays; //import 꼭 넣기
class Solution {
public boolean solution(int[] arr) {
boolean answer = true;
Arrays.sort(arr);
int j = 1;
for(int i = 0; i < arr.length ; i++){
if(arr[i] != j){
answer = false;
break;
}else{
j++;
}
}
return answer;
}
}
arr을 순서대로 정렬 한 다음에, 반복문을 통해서 1부터 차례대로 들어가 있는지 검사했다.
다른 사람들의 코드를 보니 이 방법 안에서 좀 더 간단하게 표현하는 방법이 있었다.
import java.util.Arrays;
class Solution {
public boolean solution(int[] arr) {
boolean answer = true;
Arrays.sort(arr);
for(int i = 0; i < arr.length ; i++){
if(arr[i] != i+1){
answer = false;
break;
}
}
return answer;
}
}
증가하는 수를 따로 두지 않고 반복문 안의 i 에 1을 더해 비교하면 되는 것이었다!
해설 강의
- 체크 배열을 만들고 체크하기
import java.util.Arrays;
class Solution {
public boolean solution(int[] arr) {
boolean answer = true;
int chk[] = new int[100001];
int n = arr.length;
for(int i=0 ; i<n; i++){
if(arr[i]<1 || arr[i] > n){
answer=false;
}
chk[arr[i]]++;
}
for(int i=1; i<=n; i++){
if(chk[i] != 1){
answer = false;
break;
}
}
return answer;
}
}
반응형
'JAVA > CodingTest' 카테고리의 다른 글
[코딩테스트] 땅따먹기 JAVA (1) | 2024.11.14 |
---|---|
[코딩테스트] 가장 큰 정사각형 찾기 JAVA (동적 계획법 DP) (0) | 2024.11.13 |
[코딩테스트] 나머지 한 점 JAVA (0) | 2024.11.13 |
[코딩테스트] 자릿수 더하기 JAVA (0) | 2024.11.13 |
댓글