[33번 로또의 순위]
나의 풀이
단순하지만 깔끔한 방법... ㅋㅋ
function solution(lottos, win_nums) {
var answer = [];
let numsBest = 0;
let numsWorst = 0;
for (let i = 0; i < 6; i++) {
for (let j = 0; j < 6; j++) {
if (lottos[i] === win_nums[j]) {
numsBest += 1;
numsWorst += 1;
};
};
if (lottos[i] === 0) {
numsBest += 1;
};
};
switch (numsBest) {
case 6:
answer.push(1);
break;
case 5:
answer.push(2);
break;
case 4:
answer.push(3);
break;
case 3:
answer.push(4);
break;
case 2:
answer.push(5);
break;
case 1:
answer.push(6);
break;
case 0:
answer.push(6);
break;
};
switch (numsWorst) {
case 6:
answer.push(1);
break;
case 5:
answer.push(2);
break;
case 4:
answer.push(3);
break;
case 3:
answer.push(4);
break;
case 2:
answer.push(5);
break;
case 1:
answer.push(6);
break;
case 0:
answer.push(6);
break;
};
return answer;
}
참고할만한 풀이
function solution(lottos, win_nums) {
// 순위 배열을 만들어 둔다.
const rank = [6, 6, 5, 4, 3, 2, 1];
// include를 사용하여 교집합을 구하고 filter로 재구성한다.
// 그리고 length로 갯수를 센다
let minCount = lottos.filter(v => win_nums.includes(v)).length;
let zeroCount = lottos.filter(v => !v).length;
const maxCount = minCount + zeroCount;
// rank[index]를 이용해 배열의 원소를 추출한다.
return [rank[maxCount], rank[minCount]];
}
[36번 문자열 내림차순으로 배열하기] - 다시 풀이
정렬 메소드가 왜 작동을 안할까? -> sort 메소드는 배열 메소드이기때문에
=> sort에 함수식을 더했더니 정렬이 되었다.
런타임에러? => 처음에 정규식을 사용해 풀었더니 런타임 에러가 발생하였다. 정규식표현은 사실살 필요가 없었고 sorting하니 대문자까지 정렬이 되었다.
나의 풀이 => 런타임에러 발생
function solution(s) {
// 정규식 표현을 사용하여 조건에 맞는 문자를 추출하고 내림차순으로 정렬하였다.
// 그리고 join으로 합쳤다.
let sLower = s.match(/[a-z]/g).sort(function (a, b) {
if (a > b) return -1;
else if (b > a) return 1;
else return 0;
}).join('');
let sUpper = s.match(/[A-Z]/g).sort(function (a, b) {
if (a > b) return -1;
else if (b > a) return 1;
else return 0;
}).join('');
return sLower + sUpper
}
정규식 표현
https://curryyou.tistory.com/234
[자바스크립트] 정규표현식(Regular Expression) 기초/기본 쉽고 상세한 사용 방법 정리(샘플 예제 코
# 정규표현식이란?(Regular Expression: Regex) 정규표현식은 "특정 패턴의 문자열"을 찾기 위한 표현 방식입니다. (이런걸 형식 언어, formal languange라고 합니다.) 정규표현식을 이용하면, 특정 패턴에 매
curryyou.tistory.com
다시 푼 나의 풀이
function solution(s) {
// split으로 배열로 만들어준 후 sort식을 사용하여 내림차순으로 정렬하니 대문자까지 정렬되었다.
// 그 후 join('')을 사용하여 문자열로 변환하였다.
return s.split('').sort(function (a, b) {
if (a > b) return -1;
else if (b > a) return 1;
else return 0;
}).join('')
}
[37번 소수판별식]
나의 풀이
function solution(nums) {
var answer = 0;
let sumArr = [];
// 3중 for 문을 사용할때 중복되지 않도록 하려면 initial 값을 같지 않도록 바꿔주면 된다.
for (let i = 0; i < nums.length; i++) {
for (let j = i + 1; j < nums.length; j++) {
for (let k = j + 1; k < nums.length; k++) {
if (i !== j && i !== k && j !== k) {
sumArr.push(nums[i] + nums[j] + nums[k])
};
};
};
};
let sumArrSorted = sumArr.sort()
// for문으로 반복하며 소수판별을 해주었다.
for (let l = 0; l < sumArrSorted.length; l++) {
function isPrime(x) {
if (x === 2) {
return true;
};
// 소수판별에는 제곱근까지만 나누어주는 방법을 사용했다.
// 조금 복잡하지만 속도가 빠르다.
for (let m = 2; m <= Math.floor(Math.sqrt(x)); m++) {
if (x % m === 0) {
return false;
};
};
return true
};
if (sumArrSorted[l] !== 1 && isPrime(sumArrSorted[l]) === true ) {
answer += 1
};
};
return answer / 6;
}
소수 판별식
https://ant-programmer.tistory.com/2
[JavaScript] 소수 판별식
소수(Prime Number)를 판별하는데 여러가지 방법이 있는데 오늘은 내가 알고리즘 공부를 하면서 직접 찾아본 세 가지 방법을 정리하려한다. 1) 직접 나누어서 계산하기 2) N/2 까지만 나누어서 계산하
ant-programmer.tistory.com
[20번 완주하지 못한 선수] - 다시 풀이
나의 풀이
function solution(participant, completion) {
var answer = '';
// 먼저 배열들을 정렬해준다.
let partSorted = participant.sort()
let compSorted = completion.sort()
// 정렬된 배열의 각 인덱스를 비교한다.
// 주의할 점은 이 문제에 "completion의 길이는 participant의 길이보다 1 작습니다."
// 이러한 조건이 있기 때문에 가능하다는 것이다.
// 중복검사는 따로 필요가 없다.
for (let i = 0; i < partSorted.length; i++) {
if (partSorted[i] !== compSorted[i]) {
return partSorted[i]
};
};
}
[21번 이상한 문자 만들기] - 다시 풀이
나의 풀이
function solution(s) {
let answer = '';
// split으로 단어를 잘라 배열을 만들어주었다.
let sSpl = s.split(' ')
let sSpl2 = [[]]
// 2차원 배열의 형태로 짝,홀수번째의 경우에 따라 대/소문자로 변환해주었다.
for (let i = 0; i < sSpl.length; i++) {
sSpl2[i] = [];
for (let j = 0; j < sSpl[i].length; j++) {
if (j % 2 === 0) {
sSpl2[i].push(sSpl[i][j].toUpperCase())
} else {
sSpl2[i].push(sSpl[i][j].toLowerCase())
};
};
// 아래와 같이 if문을 적용해도 마지막에 공백(' ')이 추가되지 않는다.
/*if (i < sSpl.length - 1) {
sSpl2[i].push(' ')
};*/
};
// 배열들의 값을 새로운 문자열로 저장해주었다.
for (let k = 0; k < sSpl2.length; k++) {
for (let l = 0; l < sSpl2[k].length; l++) {
answer += sSpl2[k][l]
};
// k번째 배열의 작업이 끝나면 공백(' ')이 저장되도록 하였다.
// 이렇게 하면 마지막에 공백이 추가로 붙는다. 이것을 제거해주어야 한다.
answer += ' '
};
// substr 메소드를 통해 처음부터 마지막 문자열(공백' ')전까지의 문자열을 추출해주었다.
return answer.substr(0, answer.length - 1)
}
[30번 최소직사각형] - 다시 풀이
나의 풀이
function solution(sizes) {
var answer = 0;
let maxSizes = [];
let minSizes = [];
// 배열을 만들어 2차 배열에서 최대값과 최소값을 각각의 배열에 넣어준다.
// Math.max를 사용하기 위해 Function.prototype.apply() 를 사용하였다.
// 전개연산자(spread operator)도 사용해보았다.
for (let i = 0; i < sizes.length; i++) {
maxSizes.push(Math.max(...sizes[i]));
minSizes.push(Math.min(...sizes[i]));
};
/*let maxSorted = maxSizes.sort(function (a, b) {
if (a > b) return -1;
else if (b > a) return 1;
else return 0});
let minSorted = minSizes.sort(function (a, b) {
if (a > b) return -1;
else if (b > a) return 1;
else return 0});
return maxSorted[0] * minSorted[0];*/
// 좀더 간결한 코드를 위해 아래와 같이 바꿔보았다.
let maxSorted = Math.max(...maxSizes)
let minSorted = Math.max(...minSizes)
return maxSorted * minSorted;
}
배열에서 최대값/최소값 구하기
https://hianna.tistory.com/487
[Javascript] 배열에서 최대값, 최소값 구하기
Javascript 배열의 여러 원소들 중 최대값, 최소값을 구하는 방법을 정리합니다. 1. Math.max(), Math.min() 소개 2. Function.prototype.apply() 사용하기 3. Spread Operator(전개 연산자) 사용하기 1. Math.max(), Math.min()
hianna.tistory.com
[38번 숫자 문자열과 영단어]
나의 풀이
function solution(s) {
// replace는 첫번째 인자에 해당하는 문자열을 두번째 인자로 변환해준다.
// replace는 조건에 맞는 가장 첫번째 문자열만을 변환해주기 때문데 /문자/g 의 정규표현식을 사용하여 모든 문자열을 검사해줄수 있다.
// 문자열로 출력이 되기때문에 Number()로 감싸 숫자로 변환해주었다.
return Number(s
.replace(/zero/g,'0')
.replace(/one/g,'1')
.replace(/two/g,'2')
.replace(/three/g,'3')
.replace(/four/g,'4')
.replace(/five/g,'5')
.replace(/six/g,'6')
.replace(/seven/g,'7')
.replace(/eight/g,'8')
.replace(/nine/g,'9')
);
}
모든 문자열 치환하기
https://hianna.tistory.com/343
[Javascript] 모든 문자열 치환하기 (replace, replaceAll)
Javascript에서 문자열을 치환하기 위해서 replace() 함수를 사용하는 방법을 알아보았습니다. 그런데, replace() 함수는 문자열에서 변경하려는 문자열이 여러 번 반복될 경우, 첫 번째로 발견한 문자
hianna.tistory.com
알고리즘 추가문제
https://docs.google.com/spreadsheets/d/1-Q7sCRa61BGol1D0-3ta-Uily0MI4LZkaAbGVc0MvAQ/edit#gid=0
'Hanghae99' 카테고리의 다른 글
| 221125 TIL React 입문 주차 1 (0) | 2022.11.25 |
|---|---|
| 221124 TIL 알고리즘 문제풀이 5 (0) | 2022.11.24 |
| 221122 TIL 알고리즘 문제풀이 3 (0) | 2022.11.22 |
| 221121 TIL 알고리즘 문제풀이 2 (0) | 2022.11.22 |
| 221120 WIL 항해99 1주차 회고 (0) | 2022.11.21 |