1. 양꼬치
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(n, k) {
k = k - Math.floor(n/10)
return 12000*n + 2000*k
}
2. 369게임
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(order) {
return order.toString().split("").filter((el)=>el==3||el==6||el==9).length
}
3. 완주하지 못한 선수
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(participant, completion) {
participant.sort()
completion.sort()
for(let i = 0 ;i<participant.length; i++){
if(participant[i] !== completion[i]) return participant[i]
}
}
4. 문자열 내 마음대로 정렬하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(strings, n) {
return strings.sort().sort((a,b)=> {
if(a[n]>b[n]) return 1
else if(a[n]==b[n]) return 0
else return -1
})
}
5. 유한소수 판별하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(a, b) {
let maxD = a
let [c,d] = a>b ? [a,b] : [b,a]
for(let r;r=c%d;c=d,d=r){maxD = r}
b = b/maxD
while(true){
if(b<=1) return 1
if(b%2 && b%5) return 2
if(b%2==0) b= b/2
if(b%5==0) b= b/5
}
}
다른 사람 풀이 본 후
function solution(a, b) {
return Number((a / b).toFixed(10)) == a / b ? 1 : 2;
}
6. 두개 뽑아서 더하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(numbers) {
var answer = [];
for(let i = 0 ; i<numbers.length; i++){
for(let k = i+1; k<numbers.length; k++){
if(answer.indexOf(numbers[i] + numbers[k]) == -1) {
answer.push(numbers[i] + numbers[k])
}
}
}
return answer.sort((a,b)=>a-b);
}
다른 사람 풀이 본후
function solution(numbers) {
const temp = [];
for (let i = 0; i < numbers.length; i++) {
for (let j = i + 1; j < numbers.length; j++) {
temp.push(numbers[i] + numbers[j]);
}
}
const answer = [...new Set(temp)];
return answer.sort((a, b) => a - b);
}
new Set으로 객체를 만들어 배열의 중복을 제거 할수 있다.
중복 제거 후 배열의 형태로 다시 변환해 줘야 한다.
7. 연속된 수의 합
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(num, total) {
let answer = [];
if(total%num == 0){
answer.push(total/num)
for(let i = 1; i<num/2; i++){
answer.unshift(total/num-i)
answer.push(total/num+i)
}
}else{
for(let i = 1; i<=num/2; i++){
answer.unshift(Math.ceil(total/num-i))
answer.push(Math.ceil(total/num+i)-1)
}
}
return answer
}
다른 사람 풀이 본 후
function solution(num, total) {
var min = Math.ceil(total / num - Math.floor(num / 2));
var max = Math.floor(total / num + Math.floor(num / 2));
return new Array(max - min + 1).fill(0).map((el, i) => {
return i + min;
});
}
new Array(배열길이).fill(0으로 채우기)
8. 최빈값 구하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(array) {
let obj = {};
for (let i = 0; i < array.length; i++) {
obj[array[i]] = (obj[array[i]] || 0) + 1
}
const answer = Object.keys(obj).sort((a, b) => obj[b] - obj[a]);
return obj[answer[0]] == obj[answer[1]] ? -1 : +answer[0];
}
다른사람 풀이 본 후
function solution(array) {
let m = new Map();
for (let n of array) m.set(n, (m.get(n) || 0) + 1);
m = [...m].sort((a, b) => b[1] - a[1]);
return m.length === 1 || m[0][1] > m[1][1] ? m[0][0] : -1;
}
Map으로 객체 만들기
9. 다항식 더하기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(polynomial) {
let coefficient = 0;
let constant = 0;
polynomial = polynomial.split(" + ");
for (let i = 0; i < polynomial.length; i++) {
if (polynomial[i].includes("x"))
coefficient += parseInt(polynomial[i]) || 1;
else constant += +polynomial[i];
}
if (coefficient == 1) coefficient = "";
const answer = [coefficient + "x", constant.toString()];
return answer.filter((v) => v[0] != 0).join(" + ");
}
다른사람 풀이 본 후 배운부분
var [x, c] = p.split("+").reduce(
([a, b], s) => {
if (s.includes("x")) {
return [a + Number(s.trim().replace("x", "") || 1), b];
}
return [a, b + Number(s)];
},
[0, 0]
);
reduce에 배열을 넣을 생각을 못했는데 이 풀이를 보고 알았다.
10. 소수 찾기
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(n) {
var answer = 0;
for (let i = 3; i <= n; i += 2) {
let num = true;
for (let k = 2; k <= Math.sqrt(i); k++) {
if (i % k == 0) {
num = false;
break;
}
}
if (num) answer += 1;
}
if (n >= 2) answer += 1;
return answer;
}
짝수는 2로 나누어 떨어지므로 2를 제외한 짝수는 소수가 아니기 때문에 반복문에서 제외
11. 모의고사
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(answers) {
const length = answers.length;
let a = "12345".repeat(Math.ceil(length / 5));
let b = "21232425".repeat(Math.ceil(length / 8));
let c = "3311224455".repeat(Math.ceil(length / 10));
let answer = [0, 0, 0];
for (let i = 0; i < answers.length; i++) {
if (answers[i] == +a[i]) answer[0] += 1;
if (answers[i] == +b[i]) answer[1] += 1;
if (answers[i] == +c[i]) answer[2] += 1;
}
const max = Math.max(...answer);
return answer
.map((v, index) => [v, index + 1])
.filter((v) => v[0] == max)
.map((v) => v[1]);
}
12. 포켓몬
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(nums) {
return Math.min([...new Set(nums)].length, nums.length / 2);
}
13. 로또 최고순위와 최저순위
프로그래머스
코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.
programmers.co.kr
function solution(lottos, win_nums) {
const correct = lottos.filter((v) => win_nums.includes(v)).length;
const mistery = lottos.filter((v) => !v).length;
const high = Math.min(6, 7 - correct - mistery);
const low = Math.min(6, 7 - correct);
return [high, low];
}
14. 소수만들기
function solution(nums) {
let plus = [];
let answer = 0;
for (let i = 0; i < nums.length - 2; i++) {
for (let k = i + 1; k < nums.length - 1; k++) {
for (let j = k + 1; j < nums.length; j++) {
plus.push(nums[i] + nums[k] + nums[j]);
}
}
}
for (let i = 0; i < plus.length; i++) {
let sosu = true;
if (plus[i] % 2 == 0) continue;
for (let k = 3; k <= Math.sqrt(plus[i]); k += 2) {
if (plus[i] % k == 0) {
sosu = false;
break;
}
}
if (sosu) answer += 1;
}
return answer;
}
'개발 > 알고리즘' 카테고리의 다른 글
| [알고리즘] 알고리즘 문제 풀이 순서 (0) | 2022.11.02 |
|---|---|
| [코딩테스트] 프로그래머스 문제모음 (0) | 2022.11.02 |
| [코딩테스트] 프로그래머스 문제 (0) | 2022.09.29 |
| [BigO] 객체와 배열 (1) | 2022.09.29 |
| [코딩테스트] 프로그래머스 문제 모음 (0) | 2022.09.28 |