[Level1] 8. 36 ~ 40
하루 세문제씩 꾸준히 풀기! 였으나 문제가 너무 쉬워서 5개를 풀어보겠다😂
36. 나머지가 1이 되는 수 찾기
function solution(n) {
let cnt = 1;
while (1) {
if (n % cnt === 1) return cnt;
cnt++;
}
}
우와. 베스트풀이랑 똑같다!
다만 맨날 헷갈리는 걸 한번만 짚고 가자
best 풀이
function solution(n) {
let cnt = 1;
while (cnt++) {
if (n % cnt === 1) return cnt;
}
}
베스트풀이법대로 내 코드를 바꿔봤다.
while 조건절에 증감문을 포함시키기!
37. 문자열 내림차순으로 배치하기
function solution(s) {
return s.split('').sort().reverse().join('');
}
굿굿!
대문자인지 비교하고 싶을 때는 s[i] === s[i].toUpperCase()
를 활용하면 된다!
38. 다트게임
function solution(dartResult) {
let arr = dartResult.split("");
let temp = [];
for (let i = 0; i < arr.length - 1; i++) {
if (arr[i] === "1" && arr[i + 1] === "0") {
arr.splice(i, 2, 10);
}
}
for (let i = 0; i < arr.length; i++) {
if (Number.isFinite(arr[i])) continue;
if (arr[i] === "S") {
temp.push(Math.pow(arr[i - 1], 1));
} else if (arr[i] === "D") {
temp.push(Math.pow(arr[i - 1], 2));
} else if (arr[i] === "T") {
temp.push(Math.pow(arr[i - 1], 3));
} else if (arr[i] === "*") {
if (temp.length >= 2) {
temp[temp.length - 1] = temp[temp.length - 1] * 2;
temp[temp.length - 2] = temp[temp.length - 2] * 2;
} else {
temp[temp.length - 1] = temp[temp.length - 1] * 2;
}
} else if (arr[i] === "#") {
temp[temp.length - 1] = temp[temp.length - 1] * -1;
}
}
return temp.reduce((prev, value) => prev + value, 0);
}
흐어,, 풀이 과정이 더 깔끔한게 분명 있을 것 같고 (애증의 정규식,…!!)
10인경우를 저렇게 밖에 할 수 없는지가 의문이다…
best 풀이
function solution(dartResult) {
const bonus = { 'S': 1, 'D': 2, 'T': 3 },
options = { '*': 2, '#': -1, undefined: 1 };
let darts = dartResult.match(/\d.?\D/g);
for (let i = 0; i < darts.length; i++) {
let split = darts[i].match(/(^\d{1,})(S|D|T)(\*|#)?/),
score = Math.pow(split[1], bonus[split[2]]) * options[split[3]];
if (split[3] === '*' && darts[i - 1]) darts[i - 1] *= options['*'];
darts[i] = score;
}
return darts.reduce((a, b) => a + b);
}
정규식을 이용하기 위해 match를 사용했다.
정규식 공부한 후에 다시 한번 참고해보자!
39. 8주차 최소직사각형
function solution(sizes) {
for (let i = 0; i < sizes.length; i++) {
sizes[i].sort((x, y) => x - y);
}
let wMax = Number.MIN_SAFE_INTEGER;
let hMax = Number.MIN_SAFE_INTEGER;
for (let i = 0; i < sizes.length; i++) {
if (sizes[i][0] > wMax) wMax = sizes[i][0];
if (sizes[i][1] > hMax) hMax = sizes[i][1];
}
return wMax * hMax;
}
best 풀이
function solution(sizes) {
let w = 0;
let h = 0;
sizes.forEach(s => {
const [a, b] = s.sort((a,b) => a-b);
if (a > h) h = a;
if (b > w) w = b;
});
return w * h;
}
2차원 배열에 접근할 때 풀 수 있는 좋은 방법같다.
forEach로 하나한 접근해서 하나하나 sort 하기…
직관적이고 너무 좋당..
다만 sort를 여러번하니 시간복잡도 측면에서는 내 코드가 더 좋을 것 같다!
40. 서울에서 김서방 찾기
function solution(seoul) {
return `김서방은 ${seoul.indexOf("Kim")}에 있다`
}
너무 쉽자나…! 빨리 1단계 끝내야겠다..
best 풀이도 나와 같은데 이 코드를 보고 사람들이 감탄하는걸 보면서 뿌듯함을 느낀다.
확실히 한달 전의 나보다 실력이 많이 늘었다!!👍👍