진짜 별거아닌줄알았는데 고전했다 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
처음에 1부터N까지 한번씩만 나온다는줄 알고 총 합으로 구했다가 ㅋㅋㅋㅋㅋ ㅠ__ㅠ 별거아닌데 생각할게 많았던 문제!
생각할 조건은 간단하다.
1. 원소가 중복된 값은 아닌지?
2. 1-N사이의 값이 맞는지?
이 두개만 만족하면 이 배열은 순열이다.
class Solution { public int solution(int[] A) { int[] check=new int[A.length+1]; if(A.length==1)//A의 길이가 1인경우 { if(A[0]==1) return 1; return 0; } for(int i=0; i<A.length; i++){ if(A[i]>A.length ||check[A[i]]==1)//이미 counting return 0; check[A[i]]=1; //counting } return 1; } }
A의 길이가 1인경우에 굳이 아래까지 가지 않기 위해 basecase 설정해주었다.
그리고 한 숫자가 여러번 나올 경우를 체크하기 위해 check 배열을 선언해주었다.
if(A[i]>A.length ||check[A[i]]==1) 이게 핵심이었다.
A의 각 원소는 N까지만 있을 수 있으니 N보다 크면 바로 false를 리턴하고, 그렇지 않으면 중복된 값인지 체크한다.
이 포문을 전부 다 돌았다면 중복되는 숫자가 없는 것이므로 true를 리턴해준다
'이론 > 문제풀이' 카테고리의 다른 글
[Codility] Lession 4 - FrogRiverOne (0) | 2018.08.02 |
---|---|
[카카오 코드페스티벌 본선 1] 단체사진 찍기 (C++) (0) | 2018.08.02 |
[Codility] Lesson3- TapeEquilibrium (0) | 2018.08.01 |
[Codility] Lesson3 - PermMissingElem (0) | 2018.07.30 |
[Codility] Lesson2- OddOccurrencesInArray (0) | 2018.07.30 |