1. 가운데 글자 가져오기
1-1. 내 풀이
split 를 사용해서 배열로 만들어서 어렵게 풀었다,,너무 비효율적인 방법인 것 같다.
function solution(s) {
if (s.length % 2 === 0) {
return s.split('').slice(s.length / 2 - 1,s.length / 2 + 1).join('');
} else {
return s.split('')[Math.floor(s.length / 2)];
}
}
1-2. 다른 사람 풀이
굳이 배열로 안바꿔도 이렇게 index 사용해서 푸는 방법이 더 효율적인 것 같다.
앞으로 문자열에 있는 일부 글자를 가져올 때 굳이 배열로 만들지 않고 아래 방법처럼 사용해야겠다.
function solution(s) {
const mid = Math.floor(s.length/2);
return s.length %2 === 1 ? s[mid] : s[mid-1]+s[mid];
}
2. 수박수박수박수박수박수?
2-1. 내 풀이
홀수일 땐 n/2 에서 내림한 만큼 반복하고 "수" 라는 글자를 붙였다.
function solution(n) {
return n % 2 === 0 ? "수박".repeat(n/2) : "수박".repeat(Math.floor(n/2)) + "수";
}
2-2. 다른 사람 풀이
내 코드랑 비슷하지만 이렇게 쓰는 게 더 간단해 보인다.
function solution(n) {
return '수박'.repeat(n/2) + (n%2 === 1 ? '수' : '');
}
3. 내적
3-1. 내 풀이
reduce 를 사용해서 a 랑 b의 값을 곱한 결과를 계속 더했다.
function solution(a, b) {
const result = a.reduce((cur,acc,index)=>{
return cur + ( acc * b[index]);
},0)
return result;
}
3-2. 다른 사람 풀이
나랑 같은 방법이다 그런데 첫 번째 인자로 acc, 두 번째 인자는 cur 이런 식으로 쓰는데 나는 반대로 썼네.. 실행은 정상적으로 되지만 헷갈리지 않게 이름을 제대로 명시해야겠다.
function solution(a, b) {
return a.reduce((acc, _, i) => acc += a[i] * b[i], 0);
}
4. 약수의 개수와 덧셈
4-1. 내 풀이
약수의 개수를 구하고 짝수면 더하고, 홀수면 빼도록 하였다.
function solution(left, right) {
let result = 0;
for (i=left; i<=right; i++) {
let cnt = 0;
for (j=1;j<=i;j++) {
if (i % j === 0) cnt++
}
if (cnt % 2 === 0) result += i;
else result -= i;
}
return result;
}
4-2. 다른 사람 풀이
보면서 신기했다 패턴을 찾아서 이런 식으로 풀 수 있는 거구나.. 약수가 홀수인 건 제곱근이 정수이기 때문에 sqrt 를 사용한 것이다
function solution(left, right) {
var answer = 0;
for (let i = left; i <= right; i++) {
if (Number.isInteger(Math.sqrt(i))) {
answer -= i;
} else {
answer += i;
}
}
return answer;
}
5. 문자열 내림차순으로 배치하기
[프로그래머스 1단계 - 문자열 내림차순으로 배치하기]
5-1. 내 풀이
split 로 배열로 만들고 sort 를 사용해 정렬을 하고 join 으로 다시 문자열로 만들어줬다.
function solution(s) {
return s.split('').sort((a,b) => a < b ? 1 : -1).join('')
}
5-2. 다른 사람 풀이
나랑 같은 방법인데 sort 를 하고 reverse 를 하였다.
function solution(s) {
return s.split("").sort().reverse().join("");
}
6. 부족한 금액 계산하기
6-1. 내 풀이
길이가 count, 내용은 price 인 배열을 만들어 reduce 를 사용하여 가격을 계속 더했다.
function solution(price, money, count) {
const total = new Array(count).fill(price).reduce((acc,cur,index) => {
return acc + cur * (index + 1)
},0)
return total <= money ? 0 : total - money;
}
6-2. 다른 사람 풀이
for 문을 사용하여 풀었다 내용은 같다.
function solution(price, money, count) {
let answer = 0;
for (let i = 1; i <= count; i++) {
answer += price * i;
}
return answer > money ? answer - money : 0;
}
7. 문자열 다루기 기본
7-1. 내 풀이
통과되지 않는 케이스가 있어 시간이 오래 걸렸다... 예외 케이스 중에서 '0000' '10e1' 이런 게 있어 for 문을 사용하여 문자 하나하나를 숫자인지 판별하였다.
function solution(s) {
if (s.length !== 4 && s.length !== 6) return false;
for (i = 0; i < s.length; i++) {
if (isNaN(s[i])) return false;
}
return true;
}
7-2. 다른 사람 풀이
정규식으로 푸는 방법도 있다. 정규식 다시 공부해 봐야겠다.. 어렵다..
function alpha_string46(s){
var regex = /^\d{6}$|^\d{4}$/;
return regex.test(s);
}
8. 행렬의 덧셈
8-1. 내 풀이
map을 두 번 사용하여 이차원배열에 접근해서 값을 더해줬다.
function solution(arr1, arr2) {
const result = arr1.map((itemArr,index1) => {
return itemArr.map((item, index2)=> {
return item += arr2[index1][index2]
})
})
return result;
}
8-2. 다른 사람 풀이
나랑 같은 코드인데 이렇게 짧게도 표현할 수 있구나..
function sumMatrix(A,B){
return A.map((arr1, idx1) => arr1.map((val, idx2) => val+B[idx1][idx2]));
}
9. 직사각형 별찍기
9-1. 내 풀이
repeat 을 사용하여 풀었다.
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
const a = Number(n[0]), b = Number(n[1]);
for (i=0; i<b; i++) {
console.log("*".repeat(a));
}
});
9-2. 다른 사람 풀이
반복문을 안 쓰고 repeat 을 두 번 사용하는 방법도 있다 신기
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
const a = Number(n[0]), b = Number(n[1]);
console.log((('*').repeat(a)+`\n`).repeat(b))
});
10. 최대공약수와 최소공배수
10-1. 내 풀이
작년에 학교에서 컴공 1학년 파이썬 수업을 들었는데 거기서 맨날 최소공배수, 최대공약수 구해서 바로 이 문제를 풀었다.
function solution(n, m) {
var answer = [];
for(i=Math.max(n,m); i>=1; i--) {
if(n % i === 0 && m % i === 0) {
answer.push(i);
break;
}
}
const n2 = n;
const m2 = m;
while (n !== m) {
if (n > m) m += m2;
else n += n2;
}
answer.push(n);
return answer;
}
10-2. 다른 사람 풀이
다양한 풀이가 많았는데 나는 그냥 위에 코드처럼 학교에서 배웠던 내용으로 풀어야겠다.
'💜 코딩테스트 > 문제풀이' 카테고리의 다른 글
[프로그래머스 알고리즘 고득점 Kit] 문제풀이 - 해시 (0) | 2024.07.19 |
---|---|
[프로그래머스 1단계] 문제풀이 #5 (0) | 2024.06.15 |
[프로그래머스 1단계] 문제풀이 #4 (0) | 2024.06.11 |
[프로그래머스 1단계] 문제풀이 #2 (0) | 2024.05.28 |
[프로그래머스 1단계] 문제풀이 #1 (0) | 2024.04.04 |
FE 개발자가 되고 싶은 짱잼이
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!