2021. 7. 16. 17:44ㆍ개발공부/알고리즘
우아한 형제들의 코테를 보기전 Codility에서 제공하는 베타문제를 풀어보았다.
문제는 주어진 배열이 갖고있지않는 정수 중 가장 작은 숫자를 반환하는 프로그램을 짜야한다.
나는 sorting된 배열을 순서대로 돌면서 음수일땐 1을 반환하도록하였고,
i번째 요소가 그 다음 요소와 같지않고 i번째 요소에 1을 더한 값과 그 다음 요소가 같지않고 i번째 요소는 양수라면(🙄)
i번째 요소에 1을 더한값을 리턴하도록 하였다. 그리고 이 조건이 성립된다면 break를걸어 for문을 빠져나오도록 만들었다.
결과는 일단 배열 sorting방법부터 틀렸다😀
function solution(A) {
// write your code in JavaScript (Node.js 8.9.4)
arr = A.sort((a,b)=>a-b);
console.log(arr);
answer = 1;
for (i=0; i<arr.length; i++) {
if (arr[i] < 0) answer =1;//
if (arr[i] != arr[i+1] && arr[i]+1 != arr[i+1] && arr[i] > 0) answer=arr[i]+1;
if (answer != 1) break;
}
return answer;
}
let A = [1, 13, 6, 14, 1, 12];
console.log(solution(A));
sort함수는 파라미터가 비어있다면 유니코드 순서에 따라 값을 정렬하기때문에 우리가 원하는 정렬 방법이 먹히지않는다.
따라서 숫자 크기 순서대로 정렬을 해주고싶다면 sort함수의 파라미터로 함수를 정의해주어야한다.(compareFunction이라고함)
함수는 a,b두개의 파라미터를 받고 결과값이 음수인지 양수인지를 이용하여 숫자를 오름차순으로 정렬해주는데, 화살표함수로 간단하게 나타내주었다.
arr = A.sort((a,b)=>a-b);
정렬을 잘 해주었고 이젠 example input값은 다 잘 출력시켜주는데, 제출 후 결과는 계속 correctness가 22%.......
반례를 찾느라 한참 걸렸지만 결국 찾아냈다.
예를들어, 배열 A가 [-10, 10]일때 첫번째 if문에서 answer=1을 성립하지만 여기서 멈추지않고 다음 if문으로 넘어가게된다. 그래서 반환값은 1이어야하는데 계속 11이 반환되었던것이다😩
이걸 어떤식으로 잡아주어야할까 한참 고민하다가 결국 다른 분의 아주 깔끔한 코드를 참고하였다.
[Codility] Lesson 4: Counting Elements - MissingInteger (javascript)
깃허브 : https://github.com/miiingo/codility Task description 원본 사이트 : https://app.codility.com/programmers/lessons/4-counting_elements/missing_integer/ MissingInteger coding task - Learn t..
miiingo.tistory.com
항상 for문과 if를 사용하여 코드를 짜왔는데, set을 이용하니 이렇게 간단한 코드가 나올 수 있었다🤓
✨ 내가 이번 문제에서 배운 것
- set객체를 이용하면 배열의 중복요소가 제거된다.
- set은 length가 아닌 size를 이용하여 길이를 구한다.
'개발공부 > 알고리즘' 카테고리의 다른 글
[JS] 프로그래머스 완주하지 못한 선수 (0) | 2021.07.30 |
---|---|
[JS] 프로그래머스 K번째수 (0) | 2021.07.30 |
[JS] 1,2차원 배열 탐색 문제 (0) | 2021.07.14 |
[JS] 홀수구하기, 1의자리 숫자가 일치하는 값 찾기 (0) | 2021.07.01 |
[JS] 최솟값구하기 (0) | 2021.06.30 |