1. 평균 구하기
1-1. 나의 풀이
reduce 를 사용하여 배열 요소들의 합을 sum 에 리턴하고,
평균 값을 구하기 위해 arr 의 길이만큼 나누었다.
function solution(arr) {
const sum = arr.reduce((acc,item) => {
return acc + item;
},0)
return sum / arr.length
}
1-2. 다른 사람 풀이
내 코드와 구현 방법은 동일하지만, 더 간단하게 표현하였다.
function average(array){
return array.reduce((a,b) => a+b) / array.length;
}
2. 약수의 합
2-1. 나의 풀이
약수를 구하기 위해 1부터 본인 자신까지 for 문을 돌려,
n을 i 로 나눈 나머지가 0 이라면 (약수라면) result 에 i 를 더했다.
function solution(n) {
let result = 0;
for(i=1;i<=n;i++) {
if(n%i === 0) result += i;
}
return result;
}
2-2. 다른 사람 풀이
변수명이랑 띄어쓰기 정도만 다르고 같은 방식을 사용한 똑같은 코드이다.
function solution(num) {
let sum = 0;
for (let i = 1; i <= num; i++) {
if (num % i === 0) sum += i
}
return sum
}
3. 문자열 정수로 바꾸기
3-1. 나의 풀이
숫자로 바꾸기 위해 기본적으로 내장된 Number 메서드를 사용하였다.
function solution(s) {
return Number(s)
}
3-2. 다른 사람 풀이
이 코드를 보면서 놀랐다. 자바스크립트가 타입이 유연하기 때문에 자동으로 정수로 바꿔준 것이다.
하지만 댓글들을 보면 내장함수를 사용하는 게 더 좋다고 하지만 자바스크립트라는 언어의 특징을 이용하며 작성한 코드라서 신선했다.
function strToInt(str){
return str/1
}
4. 나머지가 1이 되는 수 찾기
[프로그래머스 1단계 - 나머지가 1이 되는 수 찾기]
4-1. 나의 코드
2부터 n 까지 for 문을 돌려, n 이 i 로 나눈 나머지가 1이면 i 를 리턴했다.
function solution(n) {
for(i=2;i<n;i++) {
if(n%i===1) return i;
}
}
4-2. 다른 사람 코드
같은 반복문 이지만 이사람은 while 을 사용하였다. while 내에서도 증감시킬 수 있다는 것을 알게되었다.
function solution(n, x = 1) {
while (x++) {
if (n % x === 1) {
return x;
}
}
}
5. 짝수와 홀수
5-1. 나의 코드
삼항연산자를 사용하여 2로 나누어 떨어지면 'Even', 그렇지 않으면 'Odd' 를 반환했다.
function solution(num) {
return num % 2 === 0 ? 'Even' : 'Odd';
}
5-1. 다른 사람 코드
나처럼 삼항연산자를 사용하였지만 === 0 을 하지않고 바로 num % 2 가 0 이고,
0 은 거짓이기 때문에 "Even" 이 반환되도록 하였다.
function evenOrOdd(num) {
return num % 2 ? "Odd" : "Even"
}
6. 자릿수 더하기
6-1. 나의 코드
정보처리기사 실기 문제에 자릿수 구하는 문제가 종종 나와서 이를 활용해서 풀어보았다.
function solution(n) {
let sum = 0;
while(n > 0) {
sum += n % 10;
n = Math.floor(n / 10);
}
return sum;
}
6-2. 다른 사람 코드
숫자를 문자열로 바꾸기 위해 공백 문자열을 추가하였다. (이것도 자바스크립트의 유연한 형변환 특징 사용)
그리고 split 를 사용하여 배열로 만들어주고, reduce 를 사용하여 합을 구했다.
근데 배열에 든 내용은 문자열이기 때문에 parseInt 로 숫자로 바꿔주고 더한 코드이다.
function solution(n){
return (n+"").split("").reduce((acc, curr) => acc + parseInt(curr), 0)
}
6-3. 다시 풀어보기
답은 맞췄지만, 다른 사람의 코드를 보고 다시 풀어보았다.
나는 toString, Number 를 사용하였다.
function solution(n) {
return n.toString().split("").reduce((acc,item) => acc + Number(item), 0);
}
7. x만큼 간격이 있는 n개의 숫자
[프로그래머스 1단계 - x만큼 간격이 있는 n개의 숫자]
7-1. 나의 코드
for 문을 사용하여 n 만큼 반복하여 i 에 x 를 곱한 값을 배열에 넣었다.
function solution(x, n) {
let result = [];
for(i=1; i<=n; i++) {
result.push(i*x);
}
return result;
}
7-2. 다른 사람 코드
좋은 코드를 발견했다. Array(n).fill(x) 를 사용해서 길이가 n 이고, 내용은 x 값으로 채워진 배열을 만드는 것이다.
그리고 map 을 사용하여 index 에 1을 더하고 v값(x값)을 곱해 배열을 리턴하였다
Array(n).fill(x) ... 기억해야겠다!
function solution(x, n) {
return Array(n).fill(x).map((v, i) => (i + 1) * v)
}
8. 자연수 뒤집어 배열 만들기
8-1. 나의 코드
자연수를 배열로 만들기 위해 문자열로 바꾸고 split 을 사용하고 reverse 를 사용해서 뒤집었다.
배열안에 있는 내용은 문자열로 된 값들이 아니라 자연수이기 때문에 map 을 사용해 값들을 숫자로 변경하여 풀었다.
function solution(n) {
const arr = n.toString().split("").reverse();
return arr.map((item) => Number(item));
}
8-2. 다른 사람 코드
잘 몰라서 찾아봤는데 Array.from() 은 배열로 변환하기 위해 사용되고,
첫 번째 파라미터는 배열로 변환하려는 유사 배열 객체나 반복 가능한 객체가 들어가고 (숫자는 못 들어감)
두 번째 파라미터는 배열의 각 요소를 변환하는데 사용되는 매핑 함수라고 한다.
그래서 n 을 문자열로 바꾼 후 배열을 만들고, 각 요소를 다시 숫자로 바꾸고 만들어진 배열을 reverse() 를 사용하여 뒤집는다.
function solution(n) {
return Array.from(n.toString(), Number).reverse();
}
9. 문자열 내 p와 y의 개수
9-1. 나의 코드
문자열 s 를 다 소문자로 바꾸고 배열로 만들었다.
그리고 filter 를 사용해서 배열의 개수를 구하고 개수가 같으면 true 를 반환하도록 만들었다.
function solution(s){
const arr = Array.from(s.toLowerCase());
const result1 = arr.filter((i) => i === 'p').length;
const result2 = arr.filter((i) => i === 'y').length;
return result1 === result2;
}
9-2. 다른 사람 코드
split 을 사용하여 나온 배열의 길이는 일치되는 개수 + 1 이기 때문에 같으면 true, 다르면 false 가 리턴된다.
function numPY(s){
return s.toUpperCase().split("P").length === s.toUpperCase().split("Y").length;
}
10. 정수 제곱근 판별
10-1. 나의 코드
Math.sqrt 를 사용해서 제곱근을 구하고, Number.isInteger 를 사용하여 정수면 x+1 의 제곱을 정수가 아니라면 -1 을 반환하였다.
function solution(n) {
const x = Math.sqrt(n);
return Number.isInteger(x) ? (x+1)**2 : -1;
}
10-2. 다른 사람 코드
나와 방법은 유사하다.
그러나 거듭제곱 값을 반환하는 Math.pow 라는 메서드를 사용했는데 이 메서드를 처음 알게 되었다! 기억해야겠다.
function solution(n) {
return Number.isInteger(Math.sqrt(n)) ? Math.pow(Math.sqrt(n) + 1, 2) : -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단계] 문제풀이 #2 (0) | 2024.05.28 |
FE 개발자가 되고 싶은 짱잼이
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!