JS 알고리즘 문제풀이 62

11.대문자 찾기

📌강의 정리 대문자는 총 3개이다. 고전적인 방법은 toUpperCase()를 사용하는것이다. x.toUpperCase()하면 x자체를 바꾸는것이 아닌 x의 대문자 값을 출력한다. x값이 변하지는 않음 깊은 복사 x= x.toUpperCase() 하면 다 바뀐다. 아스키 코드 방법도 있다. let num = x.charCodeAt() 로 하면 num에 순서대로 x의 아스키코드가 저장된다. 이것도 원래 배열을 바꾸는 것이 아닌 바뀐값을 출력하는 것이므로 if문이용하여 하나씩 비교하면된다. 📌느낀점 구글링을 조금 했지만 문제 풀기전부터 아스키코드를 이용해야겠다는 생각은 했다. 어려운점은 크게 없다. 두가지만 기억해두자 문자를 아스키코드로 바꿔주는 x.charCodeAt() 문자를 대문자로 바꿔주는 x.toU..

10.문자 찾기

📌강의 정리 그냥 간단하게 let x of s 를 쓴다. if문써서 하나씩 판별하면 된다. 내장함수도 한번 써보자. s.split(t)를 하면 t가 R이었으므로 R을 구분자로 문자열을 나누어 배열로 반환한다. 그러므로 R의 개수 +1이 반환되니까 s.split(t).length 를 하면 answer -1을하면 답이 나온다. 📌느낀점 쉬운 문제였다. 생각한대로 바로 풀면되고 추가로 알려주신 split메서드를 나중에도 잘활용하면 좋을 것 같다. //나의 코드 //강사님 코드

9.A를 #으로

📌강의 정리 함수에서 s로 받는다. answer = ""; 로 하면 문자열이라고 선언 할 수 있다. for x of s 를 하고 if x==='A'를 해서 맞으면 answer+='#' 를 누적하고 아니라면 그냥 x값을 answer +=x; 를 통해 그냥 넘어가면 끝이다. 다른 방법도 있다. replace라는 함수를 쓰는 것이다. s=s.replace(/A/, '#')이면 모든 A가 #으로 바뀌지 않는다 /A/는 처음 만나는 A만 바뀌는거고 /A/g 를 해야 모든 값이 바뀌고 let answer=s;는 문자열이기에 얕은복사가 아니라 깊은 복사가 된다. 따라서 answer=answer.replace를 해서 직접 바꿔주어야 한다. 배열 또한 slice를 하면 깊은 복사를 할 수 있지만 그건 나중에 알아보자. ..

8.일곱난쟁이

📌강의 정리 가짜 난쟁이 두개를 제외시키고 출력하자 9개의 숫자중 2개의 숫자를 빼서 가짜인지 확인해보는 과정을 반복한다. 이중 for문이 돌아야한다. i와 j가 가짜인지 확인하자 9명의 총합을 sum이라고 구해놓고 arr[i]와 arr[j]값을 더한후 그값을 sum에서 빼면 그 값이 가짜난쟁이이다. splice를 쓰자. 얕은 복사를 해서 arr값을 복사해두자. 얕은복사는 answer = arr인데 arr값이 바뀌면 answer값도 바뀐다. let sum=arr.reduce((a,b)=>a+b,0); 를 써서 sum을 우선 다 더한값으로 넣는다. 이중 포문에서 처음에는 i=0 그 다음에는 j=i+1로 한다. i뒷편부터 구해야 하기 때문이다. 적절히 콘솔을 넣어서 부분적으로 계속 디버깅하자 console...

7.10부제

📌강의 정리 10부제 번호와 자동차의 끝 두자리가 나온다. 이번에도 for of 를쓴다. ===을 쓴다. 10으로 나누면 어떤 숫자든지 마지막 1의 자리가 나머지로 나온다. 📌느낀점 문제는 무난하게 풀었는데 우선 for of를 안써서 코드가 한줄이 더 늘어났고 ===을 안썼다.. ===은 안써도 되지만 그래도 익숙해지는것이 좋을 것 같다. //나의 코드 //강사님 코드

6.홀수

📌강의 정리 홀수들만 구하고 그 홀수들의 합을 출력한다. 먼저 arr배열을 넘긴다. 탐색해서 홀수를 넘겨야한다. for문에서 i가 아니라 of 구문을 써보자. for(let x of arr) 변수를 길게 의미있게 하지말고 배울때는 간단하게 하자. ex) tmp, a, x, result 면접관앞에서는 변수이름 잘 정해서 하자. arr의 값들을 하나씩 x가 받는다. 코딩인터뷰할때 ==과 ===중에서 하나로 통일해서 해야한다. ===은 타입까지 비교한다. min은 Number.MAX_SAFE_INTEGER로 초기화한다. 습관을 들여놓자. += 이라는 할당연산자를 써서 코드를 간결하게 짜자 answer.push를 써서 answer라는 배열에 sum과 min을 push한다. 이렇게해서 answer를 정의하면 된다..

[보충] 내장함수로 최솟값, 최댓값 구하기

📌강의 정리 내장함수가 있다. 배열의 최솟값을 구해주는 Math.min(3,2,7) 을 쓰면 3,2,7이라는 인자값들 중에서 최솟값을 반환한다. 여기에 배열주소를 넣으면 값을 반환하지는 않는다. 인자값들만 넣어야 한다. 따라서 배열을 쓰고 싶다면 배열 전개 연산자를 써야한다. ...arr 를 하면 배열을 펼펴주게 된다. arr[0], arr[1], arr[2] 이렇게 되고 배열에서의 최솟값이 구해진다. 반대로 최댓값은 Math.max(...arr) 를 쓰면 최댓값이 나온다. Math.min.apply(null, arr) 를 쓰면 전개 연산자를 쓰지 않아도 된다. 전개 연산자를 추천한다. arr = [5, 3, 7, 11, 2, 15, 17]; // apply function solution(...arr)..

5.최솟값 구하기

📌강의정리 열개 천개 만개 십만개 들어올수도 있다. let arr로 입력배열을 만들어 준다. min 변수를 써보자 이때는 아주 큰값으로 초기화 해놓는 것도 좋다. min=Number.MAX_SAFE_INTEGER; 를 하면 큰 숫자로 안정적으로 초기화 할 수 있다. for문을 써보자 전에 활용했던 3수중 최소값을 응용하면 좋다. for문에 if문을 써서 그 최소값 알고리즘을 반복한다. 📌느낀점 이번에는 문제에 sort쓰지말란 말 없어서 썼는데 강사님은 안쓰고 풀었다... 지금 바로 for문으로 풀어봐야한다. 그리고 항상 배열이든 변수든 선언할때는 앞에 let이나 var을 붙이는 것을 잊지말자. 알고리즘을 항상 생각하고 프로그래밍이란 무엇인지 생각하며 문제를 풀자. //나의 코드 //강사님 코드

4.1부터 N까지 합

📌강의정리 for문 이용해서 answer에 누적하라는 문제이다. 1부터n까지의 합을 받는다. 변수는 let로 계속 받자 나중에 var이나 const써야되면 그때 쓰겠지 누적은 answer = answer+i로 하면 된다. 이 식의 과정을 다 써보면 answer에 합이 누적되는것을 알 수 있다. 📌느낀점 정확히 맞았다. 약간의 차이는 for문 다음에 한줄이지만 {}를 썼냐 안썼냐 차이 if에서는 안썼길래 안썼는데 for문에는 써야되나보다.. 더 알아보니 n*(n+1)/2 를 이용해 한줄로 합을 출력할 수도 있다... 더 열심히 공부해야겠다. //나의 코드 //강사님 코드

3.연필 개수

📌강의 정리 계산과정을 한번 따라가보면 우선 몫을 12로 나누어주고 나머지가 있으면 한다스를 더 추가해준다. 이때 방법은 두가지이다. 하나는 %와 /를 써서 조건문쓰거나 math.ceil이라는 올림함수를 써서 해보는 방법이다. 구글링해서 math라는 메소드를 알아보자. mozila사이트를 추천한다. ceil은 올리고 floor는 내리고 round는 반올림한다. 📌느낀점 구글링해서 올림함수가 있다는 것을 알았지만 알고리즘 시험에서 써도 되는지 몰라서 안썼다... 알고리즘 시험자체에대한 지식이 부족하다. 조금 알아볼 필요가 있다. 나는 조건식과 %, /를 써서 풀었고 /는 c와 다르게 //같은게 없어서 나머지가 있을경우 parseInt를 써서 정수를 따로 만들어준 후에 1을 더했다. 항상 코드를 줄이고 간결..