그저 내가 되었고
항해99) 2주차:: 코딩테스트 연습(1~14); How I solved + more 본문
🎯 문제 접근법
짧게 훑어본 결과 문제를 크게 세 가지 갈래로 나눌 수 있는 것 같다.
1. 그냥 JS 문법을 베이직하게 묻는 문제
2-1. 수학적 아이디어에 JS 문법을 조금 써서 푸는 문제
2-2. 수학적 아이디어에 JS 문법(특히 함수)를 많이 써서 푸는 문제
1👉🏻 문법을 알면 바로 풀면 되고, 모르면 구글링하면 바로 나옴
2👉🏻
2.1)수학적 아이디어를 캐치하고
2.2)그걸 JS로 어떻게 구현할지 스케치한 후
2.3) 적절한 문법을 활용할 수 있어야 함. 이 과정에서 생각지도 못한 방법을 많이 쓸 수 있음. How? JS는 JS엔진을 구동시킬 수 있으니까, 내장된 함수, 객체, 라이브러리 등등 사용해서 다양한 방법으로 풀이 가능한 것. 또한, 생각한대로 풀 수 없을 수도 있음. 최대한 러프하게 아이디어를 짜되 구글링했을 때 현실화가 어렵다 싶으면 빨리 버리고 새 방법을 찾아야 함.
🎈 Today's my BEST
1. 직사각형 별찍기
How I solved👇🏻
process.stdin.setEncoding('utf8');
process.stdin.on('data', data => {
const n = data.split(" ");
const a = Number(n[0]), b = Number(n[1]);
for (var i=0;i < b;i++) {
console.log("*".repeat(a))
}
});
Study more👇🏻
- Variables; var vs let vs const
- consol.log() vs return
2. 짝수와 홀수
How I solved👇🏻
function solution(num) {
if (num % 2 == 0) {
return "Even"
} { return "Odd"}
}
3. 가운데 글자 가져오기
How I solved👇🏻
function solution(s) {
var len = s.length;
if (len % 2 == 0) {
return ((s.charAt(parseInt(len % 2) + 1)) + (s.charAt(parseInt(len % 2)+2)))
} {return s.charAt(parseInt(len % 2)+1)
}
}
→turns out.. the wrong answer.... why😭😭😭😭😭😭
Model Answer👇🏻
function solution(s) {
if (s.length % 2 === 0) {
return s.substring(parseInt(s.length / 2)-1, parseInt(s.length / 2)+1)
} else {
return s.substring(parseInt(s.length / 2), parseInt(s.length / 2)+1)
}
}
function solution(s) {
return s.substring(Math.ceil(s.length / 2) - 1, Math.floor(s.length / 2) + 1);
}
▶두 번째 풀이 진짜 인상깊네. string에 substring 메소드가 있었는지 전혀 몰랐고요.......
올림, 내림을 '아이디어적'으로만 생각했지 '구체적인 수학 식'으로는 뱉어내지 못했는데 ㄷ ㄷ
저런 방법이.........!!!!! 신박하당
Study more👇🏻
- parseInt
- charAt
4. 두 정수 사이의 합
How I solved👇🏻
function solution(a, b) {
return (a+b)*(Math.abs(b-a)+1)/2;
}
Study more👇🏻
- Math.abs()
5. 문자열을 정수로 바꾸기
How I solved👇🏻
function solution(s) {
return (s/1)
}
6. 없는 숫자 더하기
: 0부터 9까지의 숫자 중 일부가 들어있는 정수 배열 numbers가 매개변수로 주어집니다. numbers에서 찾을 수 없는 0부터 9까지의 숫자를 모두 찾아 더한 수를 return 하도록 solution 함수를 완성해주세요.
How I solved👇🏻
function solution(numbers) {
const allNb = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
arr = allNb.filter(x => !numbers.includes(x));
var sum = arr.reduce((a, b) => a + b, 0);
return sum
}
or
function solution(numbers) {
let oneToNine = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
let temp = oneToNine.filter(x => !numbers.includes(x));
let sum = 0;
for (i = 0 ; i < temp.length ; i++) {
sum += temp[i]
}
return sum
}
Study more👇🏻
- const ___ = [ _, _, _, ....] (how to make an array exactly?)
- ___.filter(x => !numbers.includes(x));
- ___.reduce((a, b) => a+b, 0);
7. 음양 더하기
How I solved👇🏻
function solution(absolutes, signs) {
let sum = 0;
for ( i = 0 ; i < signs.length ; i++) {
if (signs[i] === true) {
sum += absolutes[i]
}
}
for ( i = 0 ; i < signs.length ; i++) {
if (signs[i] === false) {
sum -= absolutes[i]
}
}
return sum
}
or
function solution(absolutes, signs) {
let answer = 0;
for (let i = 0; i < absolutes.length; i++) {
if (signs[i] === true) {
answer += absolutes[i];
} else {
answer -= absolutes[i];
}
}
return answer
}
Idea👇🏻
- You don't need to match symbols and numbers 1:1 or -1/1 and numbers but just do minus when it comes to false comes, and do plus when true comes.
8. 평균 구하기
How I solved👇🏻
function solution(arr) {
let sum = 0
for (let i = 0; i < arr.length; i++) {
sum += arr[i];
}
var answer = sum/(arr.length);
return answer
}
of
function solution(arr) {
const avg = arr.reduce((acc, curr) => acc + curr) / arr.length;
return avg
}
Study more👇🏻
- still confusing... sum += arr[i];
9. 핸드폰 번호 가리기
How I solved👇🏻
function solution(phone_number) {
var len = phone_number.length
const ast = "*".repeat(len-4);
var answer = ast + phone_number.substring(phone_number.length-4);
return answer;
}
or
function solution(phone_number) {
let num = phone_number.toString();
let nums = num.slice(-4);
let answer = "*".repeat(phone_number.length - 4) + nums
return answer
}
Study more👇🏻
- _____.substring();
- ___.slice(_);
10. 행렬의 덧셈⭐⭐⭐
How I solved👇🏻
function solution(arr1, arr2) {
var answer = [];
for (let i=0; i<arr1.length; i++) {
let temp = [];
for (let j=0; j<arr1[i].length; j++) {
arrays = arr1[i][j] + arr2[i][j];
}
answer.push(temp);
}
return answer;
}
→TOTALLY Wrong answer. Well, not "TOTALLY" but just missed tiiiiinitiny codes..... anyway still don't couldn't solve it
→중첩 for문을 돌 때, 뭘 얼마나 돌게 하는지 헷갈렸음
→(위의 내 답안을 맞게 하려면) 두 번째 for문 안에서 arrays라는 변수를 만들고(var arrays = arr1[i][j] + arr2[i][j];) 난 후 바로 temp에 그 결과를 push 했어야 함(temp.push(arrays);)
→즉, 두 번째 for문 안에서 배열을 한 번 만들어 값을 집어넣고, 바깥의 for문에서도 한 번 더 배열을 만들어 값을 넣어야 함.
Correct Answer👇🏻
function solution(arr1, arr2) {
var answer = [];
for (let i = 0 ; i < arr1.length ; i++) {
var temp = [];
for (let j = 0 ; j < arr1[i].length ; j++) {
var arrays = arr1[i][j] + arr2[i][j];
temp.push(arrays);
}
answer.push(temp);
}
return answer;
}
Model Answer👇🏻
function solution(arr1, arr2) {
var answer = [];
for (let i = 0; i < arr1.length; i++) {
var temp = [];
for (let j = 0; j < arr1[i].length ; j++) {
temp.push(arr1[i][j] + arr2[i][j]);
}
answer.push(temp)
}
return answer;
}
function solution(A, B) {
return A.map((a, i) => a.map((b, j) => b + B[i][j]));
}
///.........진짜 이거면 답 나옴...............
Study more👇🏻
- let temp = [ ];
- ___.push(temp);
11. x만큼 간격이 있는
How I solved👇🏻
function solution(x, n) {
let temp = [];
for(let i = 1; i < n+1 ; i++) {
temp.push(x * i);
}
return temp;
}
Study more👇🏻
- let temp = [ ];
- temp.push(__);
12. 부족한 금액 계산하기
How I solved👇🏻
function solution(p, m, c) {
var howMuch = m - p*((c*(c+1))/2)
if (howMuch < 0) {
return Math.abs(howMuch);
} else {
return 0;
}
}
13. 2016년
How I solved👇🏻
function solution(a, b) {
const date1 = new Date(2016, 0, 1);
const date2 = new Date(2016, a-1, b);
const elapsedMSec = Math.ceil(
date2.getTime() - date1.getTime());
const elapsedDay =
elapsedMSec / (1000 * 60 * 60 * 24);
const remain = (elapsedDay % 7);
if (remain == 0) {return "FRI"}
else if (remain == 1) {return "SAT"}
else if (remain == 2) {return "SUN"}
else if (remain == 3) {return "MON"}
else if (remain == 4) {return "TUE"}
else if (remain == 5) {return "WED"}
else if (remain == 6) {return "THU"}
}
@if문을 for문으로 바꿀 수 없을까..? 너무 원시적인 느낌이 난다.
@처음에 1월을 0으로 표기하는걸 몰라서(...) 채점하면 me
한 3문제 정도만 계!!!!!속 틀리게 나와서 "아니 식이 맞는데 왜이래!?!!?!" 하면서 진짜 개---빡쳤었는데.... 알고보니 내가 함수를 제대로 모르고 진짜 마구 달려드느라 그런거였단걸 깨닫고......... 반성했다..... 제대로 알고 또는 알아보면서 쓰자ㅠ
How I solved👇🏻
찝찝해서 특별한 함수 안쓰고 그냥 풀려고 했는데...... 제출하면 3개 맞고 나머지는 틀리게 나온다............
아니 이유를 모르겟네.............? 왜................................?
function solution(a, b) {
let day = ["FRI","SAT","SUN","MON","TUE","WED", "THU"];
let lastdate = [31,29,31,30,31,30,31,31,30,31,30,31];
for (i = 0; i < a-1 ; i++) {
var sum = 0;
var sum = sum + lastdate[i];
}
let remain = (sum + b-1) % 7;
let answer = day[remain];
return answer
}
To Correct👇🏻
scope 문제였음... let sum = 0을 밖으로 빼줘야 함ㅠ
왜?!??!!?!?!?! ⭐⭐⭐⭐⭐왜냐면 이거를... for문 안에서 선언해버리면 재할당이 안됨. 밖에서 먼저 선언해주고 들어와야 for문을 돌면서 계속 그 값이 바뀌어 나감.........!!!!!!!!!!!!!⭐⭐⭐⭐⭐
function solution(a, b) {
let day = ["FRI","SAT","SUN","MON","TUE","WED","THU"];
let lastdate = [31,29,31,30,31,30,31,31,30,31,30,31];
let sum = 0;
for (i = 0; i < a-1 ; i++) {
sum = sum + lastdate[i];
}
let remain = (sum + b-1) % 7;
let answer = day[remain];
return answer
}
Study more👇🏻
- Math.ceil(____)
14. 나누어 떨어지는 숫자 배열
How I solved👇🏻
function solution(arr, divisor) {
var maybe = [];
for (i=0; i<arr.length; i++) {
if (arr[i] % divisor == 0) {
maybe.push(arr[i]);
}
}
if (maybe.length !== 0 ) {
return maybe.sort(function(a, b) {
return a - b;
});
} else { return [-1] }
}
Study more👇🏻
- Ascending order:
return maybe.sort(function(a, b) {
return a - b;
});
🎨 소회 및 향후 공부 방향
일단, 개념을 다 정리하고 문법을 다 보고.. 그리고 문제를 열어봐야지!!! 하지 않았던 나 자신을 칭찬해,,,
문제 먼저 보면 너무 겁먹을까봐 그냥 미루려다가 에라이~! 싶어서 봤고, 물론 겁은 먹었는데(ㅋㅋ기본으로 깔렸던 코드가 너무나도 생경했음;;) 그래서 더욱 필요한 개념이나 풀이법을 찾아보려 달려들었던 것 같다.
다음주 목요일날 당장 알고리즘 테스트를 봐야한다. 일주일만에 모든 개념이나 문법을 싹 잡고 시험을 치는건 불가능하다.
그러므로 지금처럼 문제를 꾸준히 접하면서 그때그때 필요한 개념을 정리하는게 맞겠다.
사실 오늘.. 14문제나 보고 풀 생각은 없었는데;; 다른 사람들 현황표에 O 늘어보니까 지기 싫어섴ㅋㅋㅋㅋㅋㅋ 그냥 계속 풀었네. 사실 재밌기도 했고😌😎📚📚!!
어쨌든, 오늘 문제 풀면서 공부할 게 많이 쌓였으므로 내일은 저것들 쭉 다 정리하고 알고리즘 문제 몇 개 더 풀어 보기로 하자~!
'개발 > 항해99 9기' 카테고리의 다른 글
항해99) 2주차:: 웹개발+ 4주차; JWT & API (0) | 2022.09.25 |
---|---|
항해99) 2주차:: 알고리즘 테스트 연습; Study more(1~14) (0) | 2022.09.25 |
항해99) 2주차:: 프로그래밍 기초; JavaScript for Node.js START!!! (0) | 2022.09.23 |
항해99) 1주차:: 미니프로젝트 회고(p.s. 끝나지 않는 CSS 집착.....) (0) | 2022.09.23 |
항해99) 1주차:: 웹개발+ 3주차; Selenium으로 스크래핑 (0) | 2022.09.21 |