1. 정수 내림차순으로 배치하기
1-1. 내 풀이
toString() 으로 문자열로 만들고 split() 로 배열을 만든 후, 역순으로 정렬하고 join 을 사용해 배열을 문자열로 합치고 숫자로 만들었다.
function solution(n) {
return Number(n.toString().split('').sort().reverse().join(''));
}
1-2. 다른 사람 풀이
나와 비슷하다. 다른 점은 문자열을 만들 때, 자바스크립트의 성질을 사용하여 빈문자열을 더해 문자열을 만들어줬다.
function solution(n) {
return parseInt((n+"").split("").sort().reverse().join(""));
}
2. 하샤드 수
2-1. 내 풀이
x 의 자리수를 구하다보면 원본 x 값을 잃을 수 있어 num 이라는 변수에 할 당을 하였고
while 문을 통해 자리수를 더했다. 그리고 나눈 값이 나눠 떨어지면 true 를 반환했다.
function solution(x) {
let sum = 0;
let num = x;
while (x > 0) {
sum = sum + (x % 10);
x = Math.floor(x / 10);
}
return num % sum ? false : true;
}
2-2. 다른 사람 풀이
나와 다르게 do-while 문을 사용하였다.
그리고 리턴도 나처럼 굳이 삼항연산자를 사용하지 않고 아래 처럼 사용할 수 있구나를 다시 깨닳았다.
function solution(x) {
let num = x;
let sum = 0;
do {
sum += x%10;
x = Math.floor(x/10);
} while (x>0);
return !(num%sum);
}
3. 두 정수 사이의 합
3-1. 내 풀이
나는 a와 b 중에 큰 값과 작은 값을 구하기 위해 삼항 연산자를 사용하였고 그 다음엔 for 문을 사용하여 값들을 더했다.
function solution(a, b) {
let result = 0;
const bg = a > b ? a : b;
const sm = a > b ? b : a;
for(let i = sm; i <= bg; i++) {
result += i;
}
return result;
}
3-2. 다른 사람 풀이
다른 사람은 Math 라는 함수를 사용해서 두 수 중에서 큰 수와 작은 수를 쉽게 찾아냈다.
Math 를 잊지 말아야지
function solution(a, b) {
let result = 0;
for(i = Math.min(a,b); i<= Math.max(a,b); i++) {
result += i;
}
return result;
}
4. 서울에서 김서방 찾기
4-1. 내 풀이
findIndex 를 사용하여 구현했다.
function solution(seoul) {
return `김서방은 ${seoul.findIndex((item) => item === 'Kim')}에 있다`
}
4-2. 다른 사람 풀이
다른 사람의 풀이를 보니 findIndex 말고 indexOf 라는 함수를 사용했다. 비교를 해보니 indexOf 가 더 빠르다.
단순 값을 찾는 경우엔 indexOf 를, 특정 조건을 만족하는 요소를 찾을 땐 findIndex 가 더 유용하다고 한다 기억해야지!
function solution(seoul) {
return "김서방은 " + seoul.indexOf('Kim') + "에 있다";
}
5. 없는 숫자 더하기
5-1. 내 풀이
includes 를 사용하여 numbers 배열에 0~9 사이에 숫자가 없으면 result 에 더해줬다.
function solution(numbers) {
let result = 0;
for(i=0; i<10; i++) {
if(!numbers.includes(i)) {
result = result + i;
}
}
return result;
}
5-2. 다른 사람 풀이
내가 한 것처럼 includes 를 사용한 사람도 많았는데 신기한 코드를 발견했다. 이렇게 reduce 를 사용할 수 있구나..
function solution(numbers) {
return 45 - numbers.reduce((cur, acc) => cur + acc, 0);
}
6. 음양 더하기
6-1. 내 풀이
reduce 를 사용하여 구하였다.
function solution(absolutes, signs) {
const result = absolutes.reduce((cur,item,index) => {
const sign = signs[index] ? 1 : -1;
return cur + (item * sign);
},0)
return result;
}
6-2. 다른 사람 풀이
다른 사람들의 풀이를 보니깐 내가 위에서 한 reduce 로 하는 게 좋을 거 같다. 그 외에는 for 문을 사용한 경우가 있었는데 가져와봤다.
function solution(absolutes, signs) {
let answer = 0;
for (let i = 0; i < absolutes.length; i++) {
signs[i] ? answer += absolutes[i] : answer -= absolutes[i]
}
return answer;
}
7. 나누어 떨어지는 숫자 배열
7-1. 내 풀이
filter를 사용해 나누어 떨어지는 것만 배열로 만든 후, 만약 배열이 비어 있으면 [-1] 을 반환하고 그렇지 않으면 오름차순으로 정렬했다.
function solution(arr, divisor) {
const result = arr.filter((item) => item % divisor === 0);
return result.length === 0 ? [-1] : result.sort((a,b) => a-b);
}
7-2. 다른 사람 풀이
다른 사람 풀이도 나랑 거의 같다.
function solution(arr, divisor) {
var answer = arr.filter(v => v%divisor == 0);
return answer.length == 0 ? [-1] : answer.sort((a,b) => a-b);
}
8. 핸드폰 번호 가리기
8-1. 내 풀이
먼저 문자열을 배열로 만든 후, map 을 사용해서 index 값을 사용하여 * 로 만들어 배열을 반환하고 다시 문자열로 만들었다.
function solution(phone_number) {
const arr = Array.from(phone_number);
const result = arr.map((item, index) => {
if (index < arr.length - 4) {
return "*"
} else {
return item;
}
})
return result.join('');
}
8-2. 다른 사람 풀이
4자리를 제외한 만큼 * 을 반복하고 그 뒤에 전화번호 뒤에서 4개까지 문자열로 이어서 만들었다.
심플하고 좋은 답인거 같다.
function solution(phone_number) {
var result = "*".repeat(phone_number.length - 4) + phone_number.slice(-4);
return result;
}
9. 제일 작은 수 제거하기
9-1. 내 풀이
...(스프레드) 를 사용하여 가장 작은 값을 구하고, 그 값을 제외한 배열을 만든 후 결과를 리턴했다.
function solution(arr) {
const min = Math.min(...arr);
const result = arr.filter((item) => item !== min);
return result.length === 0 ? [-1] : result;
}
9-2. 다른 사람 풀이
나와 같은 방법으로 푼것같다
function solution(arr) {
const min = Math.min(...arr);
return arr.length !== 1 ? arr.filter(i => i !== min) : [-1]
}
10. 콜라츠 추측
10-1. 내 풀이
나는 while 문을 사용하여 풀었다.
function solution(num) {
let result = num;
let cnt = 0;
while(result !== 1) {
if (result % 2 === 0) {
result /= 2;
cnt += 1;
} else {
result = result * 3 + 1;
cnt += 1;
}
if (cnt >= 500) return -1;
}
return cnt;
}
10-2. 다른 사람 풀이
나랑 비슷한 방법인데 삼항연산자를 사용해서 풀었다. 그리고 1을 더하는 건 공통된 내용이라 삼항연산자가 더 효율적인 것 같다.
function collatz(num) {
var answer = 0;
while(num !=1 && answer !=500){
num%2==0 ? num = num/2 : num = num*3 +1;
answer++;
}
return num == 1 ? answer : -1;
}
'💜 코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스 알고리즘 고득점 Kit] 문제풀이 - 해시 (0) | 2024.07.19 |
---|---|
[프로그래머스 1단계] 문제풀이 #5 (0) | 2024.06.15 |
[프로그래머스 1단계] 문제풀이 #4 (0) | 2024.06.11 |
[프로그래머스 1단계] 문제풀이 #3 (1) | 2024.06.06 |
[프로그래머스 1단계] 문제풀이 #1 (0) | 2024.04.04 |
FE 개발자가 되고 싶은 짱잼이
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!