오늘부로 알고리즘 주차가 끝이 났다. 일주일 넘게 코딩 테스트 문제를 푸느라 진짜 너무 힘들었다.
일단 풀 수 있는 문제가 많이 없었을 뿐더러 다른 사람의 풀이를 이해하려고 하는 과정조차 어려웠기 때문이다.
그래도 많이 발전된 점은 문제를 보고 for문을 써야겠다, if문을 써야겠다, 배열에 집어 넣어야겠다 등..
문제를 어떻게 풀어야 할 지 대략적인 느낌이 온다는 것과, 많은 풀이를 보면서 자바스크립트 내 다양한 함수 기능을 공부해볼 수 있었다는 점이다.
100문제 정도 공부한 것 같은데, 한 문제 한 문제 내가 주석 달아가면서 정리했던 부분들을 다시 한번씩 보면서, 내 것으로 만들고 하루에 한 문제씩 풀면서 감을 키워나가야겠다.
내일부터 주특기 입문주차가 시작된다. 드디어 Node.js를 제대로 배워보는 시간이라서 너무 설레임과 동시에 어떤 고난이 찾아올지 살짝 두렵기도 하다.
항해99라는 이름 하에 정말 매 주차가 폭풍우가 몰아치고, 죽으면 안 된다는 마음으로 헤쳐나가고 있는 중이기 때문이다.
이제 벌써 4주차다. 시간이 언제 이렇게 갔지? 라는 생각이 들 정도로 매우 빠르게 흘러가고 있다. 지나간 시간에 대해 후회하지 않도록 마주하는 주차도 더 열심히 해보도록 하자. 파이팅!
프로그래머스 Lv1. 정수 제곱근 판별
function solution(n) {
let x = Math.sqrt(n);
if(x % 1 === 0) {
return Math.pow(x + 1, 2);
} else {
return -1;
}
}
n이 어떤 수의 제곱인지를 확인하기 위해 x라는 변수에 n의 제곱근 값을 넣는다.
x가 정수인지 판단하려면 정수의 성질 중 1로 나누었을 때 나머지가 0.
n이 121이라면, x는 11이니까 1로 나누어 떨어진다.
그러나 n이 3이라면, x는 루트3이니까 1로 안나누어 떨어진다.
만약 n의 제곱근이 정수이면, x + 1의 제곱을 리턴하고,
그게 아니면 -1을 리턴한다.
프로그래머스 Lv1. 제일 작은 수 제거하기
function solution(arr) {
let min = arr[0];
let minIndex = 0;
if(arr.length > 1) {
for(let i = 1; i < arr.length; i++) {
if(arr[i] < min) {
min = arr[i];
minIndex = i;
}
}
arr.splice(minIndex, 1);
} else return [-1];
return arr;
}
프로그래머스 Lv1. 콜라츠 추측
function solution(num) {
for(let i = 0; i < 500; i++) {
if(num !== 1) {
if(num % 2 === 0) {
num /= 2;
} else {
num = num * 3 + 1;
}
} else {
return i;
}
}
return -1;
}
n=1일때까지 필요한 과정을 거쳐서 만들고, 그 과정을 몇번 거쳤는지 반환하는 문제.
반복문 안에서는 num이 1이 아닐때와 1일때로 나누어준다.
먼저 조건문으로 1이 아니라면, 짝수,홀수인지 판단하여 2로 나누거나, 3으로 곱하고 1을 더한다.
만약 1이라면(1이 아닌거의 아닌거) 그대로 i를 리턴한다.
반복문을 다 돌아도 1을 못 만들었다면 -1을 리턴한다.