# Lv.1

[Javascript] LV.1 정수 내림차순으로 배치하기
문제 설명 함수 solution은 정수 n을 매개변수로 입력받습니다. n의 각 자릿수를 큰것부터 작은 순으로 정렬한 새로운 정수를 리턴해주세요. 예를들어 n이 118372면 873211을 리턴하면 됩니다. 제한 조건 n은 1이상 8000000000 이하인 자연수입니다. 입출력 예 | n | return | | --- | --- | | 118372 | 873211 | ✍ SOLUTION1 ✍ SOLUTION2  가 된다. i에 6씩 더하는 이유는 6의 배수는 2, 3으로 나누어 떨어지기 때문에 소수가 아닌 수로 판명할 수 있다. if문에서 i+2를 하는 이유는 에라토스테네스의 체에서는 6n-1와 6n+1의 숫자를 확인해야하기

[Javascript] LV.1 x만큼 간격이 있는 n개의 숫자
문제 설명 함수 solution은 정수 x와 자연수 n을 입력 받아, x부터 시작해 x씩 증가하는 숫자를 n개 지니는 리스트를 리턴해야 합니다. 다음 제한 조건을 보고, 조건을 만족하는 함수, solution을 완성해주세요. 제한 조건 x는 -10000000 이상, 10000000 이하인 정수입니다. n은 1000 이하인 자연수입니다. 입출력 예 | x | n | answer | | --- | --- | --- | | 2 | 5 | [2,4,6,8,10] | | 4 | 3 | [4,8,12] | | -4 | 2 | [-4, -8] | ✍ SOLUTION1 ✍ SOLUTION2 ✍ SOLUTION3 출처 : 프로그래머스 스쿨 | 코딩테스트 연습
과일 장수
내가 작성한 답 다른 답 해석 1차로 작성한 답은 시간이 너무 많이 소요됐다. 그 이후 다른 방법을 통해 한 결과 1차로 작성한 함수보다 시간을 줄일 수 있었다. 소요 시간 차이가 왜 나는지 찾아본 결과 for 루프를 통해 배열 반복, slice와 splice를 사용하는데 이때마다 배열의 내용을 조작하고 나누는 작업이 상대적으로 오래 걸리기 때문이다. 2차로 작성한 답은 map() 메서드를 사용해서 조작과 복사가 없고 할당 후 계산만 이루어지기 때문에 성능이 더 좋았다. 다른 답은 내림차순 정렬 후 최솟값만 곱해서 더했다.
폰켓몬
내가 작성한 답 다른 답 해석 진짜 1차원적으로 풀었다... Set 함수를 통해서 중복 요소 제거, 요소 순서 유지 등을 할 수 있는데... 굳이...
명예의 전당 (1)
내가 작성한 답 다른 답 해석 나는 k 만큼 배열이 생성되지 않으면 push하고 내림차순하고 생성되어 있으면 최소값과 score값을 비교하여 맨 앞의 값을 삭제할 지 안할 지 정했다. 다른 답은 값을 push하고 내림차순으로 정리한 다음에 0번째부터 k번째까지 잘랐다. 와우....
추억 점수
내가 작성한 답 다른 답 해석 나는 새로 스코어를 만들고 거기에 배정을 한 다음 이름이 있을 경우에 점수를 더하고 없을 경우에는 0을 더해서 answer 배열에 추가했다. 다른 답을 보면 yearning에서 name.indexOf(c)를 통해 해당 숫자를 가져오고 그 숫자가 없다면 undefined가 반환된다. 하지만 ?? 연산자를 통해 null 또는 undefined일 경우 0을 반환한다. 이렇게 원하는 결과값을 배열로 받을 수 있다.
콜라 문제
내가 작성한 답 다른 답 해석 예를 들어 a,b,n이 5,2,20일 때 5병씩 4번을 가져가면 각각 2병씩 8병이 된다. 따라서, 반납했을 때의 가치는 Math.floor(n/a) * b가 된다. 다른 답과 시간 차이가 엄청 난다 아이고... 와... 진짜 머리 좋다...
푸드 파이트 대회
내가 작성한 답 다른 답 해석 나는 너무 1차원적으로 생각했다. repeat함수로 채우고 reverse와 join으로 할 수 있는 방법이 있었는데... 조금 더 생각해봐야겠다.

[Javascript] LV1. 정수 제곱근 판별
문제 설명 임의의 양의 정수 n에 대해, n이 어떤 양의 정수 x의 제곱인지 아닌지 판단하려 합니다. n이 양의 정수 x의 제곱이라면 x+1의 제곱을 리턴하고, n이 양의 정수 x의 제곱이 아니라면 -1을 리턴하는 함수를 완성하세요. 제한 사항 n은 1이상, 50000000000000 이하인 양의 정수입니다. 입출력 예 | n | return | | --- | --- | | 121 | 144 | | 3 | -1 | 입출력 예 설명 입출력 예#1 121은 양의 정수 11의 제곱이므로, (11+1)를 제곱한 144를 리턴합니다. 입출력 예#2 3은 양의 정수의 제곱이 아니므로, -1을 리턴합니다. ✍ SOLUTION1 ✍ SOLUTION2 [출처 : 프로그래머스 스쿨 | 코딩테스트 연습](https://school.programmers.co.kr/learn/co
두 개 뽑아서 더하기
내가 작성한 답 다른 답 해석 나는 for문과 if 문을 통해서만 풀었다. 근데 if문을 굳이 사용할 필요 없이 빈 배열을 하나 추가하고 마지막에 Set을 쓰면 됐었다. Set을 생각하지 않은건 아니다. 퍼포먼스의 차이가 생각보다 컸다.
K 번째 수
(정렬) 내가 작성한 답 다른 답 해석 나는 배열을 자르고 난 후 정렬하여 해당 숫자를 answer 배열에 추가했다. 다른 답은 map 함수를 통해 command에 시작 위치, 종료 위치, 반환할 위치를 구조 분해하여 변수로 추출한다. 그 후 배로운 배열에 필터를 적용하여 조건에 맞는 요소만 선택하고, sort를 통해 정렬한다. 그 이후 원하는 값을 return 했다.
문자열 내 마음대로 정렬하기
내가 작성한 답 다른 답 해석 나는 sort를 사용해서 비교 대상의 n 번째 인덱스가 같지 않을 경우에 a의 n번째 인덱스의 글자가 클 경우 양수인 1을 지정해서 순서를 바꾸고 작을 경우 순서를 유지하는 것을 사용했다. 다른 답은 localeCompare() 메서드를 사용했다. sort를 먼저 사용한 후 비교 대상의 n번째 인덱스가 같을 경우에는 비교 대상 자체를 localeCompare()을 사용해서 비교한 후 정렬 순서를 변경했고 같지 않을 경우에는 n 번째 인덱스 끼리 비교하여 정렬했다.

[프로그래머스] 같은 숫자는 싫어
문제 >배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은 수들을 반환할 때는 배열 arr의 원소들의 순서를 유지해야 합니다. 예를 들면, arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다. arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다. 배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요. 제한조건 > phone_number는 길이 4 이상, 20이하인 문자열입니다. 입출력 예시 > --