전체 글 127

[TIL] 🤞Javascript 알고리즘 100일 챌린지 24번째 도전

문자열이 주어졌을때, 그 문자열 중에 한 번만 등장하는 문자들을 알파벳 순서대로 정렬된 문자열로 만들어 리턴하는 문제였다. 나는 frequency map 밖에 생각나지 않아서 아래처럼 풀었다. 반복문을 돌아야할 것 같아서 object 대신 map을 사용했다. 풀이를 보니 좀 더 간단한 두 가지 방법이 있었다. 하나는 split 활용하여 쪼갰을때 몇 개로 쪼개지는지에 따라 판별하는 방법(2개로 쪼개지면 한 번만 등장하는 문자이고 그 이상으로 쪼개지면 한 번 이상 등장하는 문자), 나머지 하나는 match 와 정규표현식을 사용하는 방법이었다. 나도 처음에 정규표현식을 떠올렸는데 거기서 더 나아가진 못했다. 이 문제는 꼭 다시 풀어봐야겠다. https://youtu.be/BgVt8YYrn7c

[TIL] Javascript 알고리즘 100일 챌린지 23번째 도전

정수 배열과 어떤 정수가 주어지면 그 배열에서 정수와 가장 가까운(차이가 적게 나는) 숫자를 찾아 리턴하는 문제였다. 요소를 하나씩 보면서 주어진 정수에서 뺀 다음에 Math.abs 를 사용해서 절대값으로 바꾼 다음 변수를 하나 만들어서 그 뺀 값을 기록해 두었다. 이미 있던 값보다 더 적은 값이 나오면 교체해주고. 나는 minus 변수를 처음 선언할때 문제에서 주어진 배열, 정수의 범위를 보고 999를 할당했던건데 Math.infinity 를 사용하면 가장 큰 숫자를 얻을 수 있다. 그리고 뺀 값이 같은 요소가 여러 개면 그 중 작은 것을 리턴해야 하기 때문에 아래처럼 if 문을 두었는데, 주어진 배열을 sort 먼저 해주면 if를 사용하지 않아도 된다. 다만 sort로 배열을 한번 봐주고, 반복문으로..

[TIL] Javascript 알고리즘 100일 챌린지 22번째 도전

세 개의 파라미터 i, j, k가 주어진다. i는 시작 숫자, j는 끝 숫자이다. 시작 숫자부터 끝 숫자까지 매 숫자에서 k 라는 숫자가 몇 번이나 등장 하는지 빈도 수의 총합을 리턴해야 한다. 나는 만약에 이 문제를 컴퓨터가 아닌 내가 풀어야 한다면 어떻게 할 지 고민해봤다. 나라면 시작 숫자, 끝 숫자 사이에 있는 숫자들을 일렬로 쫙 늘어놓은 다음에 k라는 숫자가 몇 번이나 등장하는지 세어나갈 것 같다. 아래 코드처럼 말이다. 그런데 split할때 그냥 빈 문자열 말고 k를 넣으면 k를 기준으로 배열로 쪼개지는데 그 배열의 요소 갯수가 결국 k가 등장하는 갯수가 된다. 굳이 filter로 한번 더 배열을 훑을 필요가 없게 된다. ! https://youtu.be/H_EYEPqvUhs

[TIL] Javascript 알고리즘 100일 챌린지 21번째 도전

주어진 숫자와 같거나 가장 가까운 팩토리얼의 값을 구하는 문제였다. 팩토리얼에 약해서 이 문제는 풀지 못했다 그리고 팩토리얼도 for 반복문으로만 생각하고 있었는데 while을 사용하면 좀 더 깔끔하게 코드를 작성할 수 있다. 해결 방법은 숫자를 하나씩 올려가면서 주어진 숫자보다 큰지 작은지 확인하면서 가장 가까운 팩토리얼을 찾는 것이 핵심이었다. https://youtu.be/SBsSM_Ckipo

[TIL] Javascript 알고리즘 100일 챌린지 20번째 도전

두 가지 문자열이 주어졌을때 서로 anagram인지 판별하는 문제다. 문자열의 각 문자 순서만 다르고 문자 구성은 같은것을 anagram이라고 한다. olleh와 hello 처럼.. 1. split, sort, join 으로 각 문자열을 정렬해주고 두 문자열이 같은지 확인 2. 해쉬맵을 이용하여 첫번째 문자열에 등장하는 문자의 빈도수를 기록한뒤 두 번째 문자열에서 각 문자를 하나씩 보면서 해쉬맵에서 찾을때마다 빈도수를 1씩 뺀다. 만약 해쉬맵에 없는 문자가 등장하거나 해쉬맵에 있어도 빈도수가 이미 0이면 anagram이 아니게 된다. function splitSortAndJoin(str) { return str.split('').sort().join(''); } function solution(befor..

[TIL] JavaScript 알고리즘 100일 챌린지 19번째 도전

주어진 문자열에서 중복되는 문자를 제거한 문자열을 리턴하는 문제였다. 자바스크립트에서 중복 제거! 하면 Set을 떠올리면 된다. (무슨 수능 강의 같다...) 그리고 indexOf와 와 반복문에서 사용할 수 있는 index를 비교하는 방법도 있고 object에 문자의 출현 갯수를 저장해서 사용하는 방법도 있다. 그러니까 코드로 보자면 아래처럼 세 가지 방법이 있겠다. 1. Set 2. indexOf와 index 비교해서 filter로 털어내기 3. frequency map 출현빈도 이렇게 알고리즘 문제라고 하는 것들을 풀다 보면 옛날에 수능 문제 푸는것 같은 느낌이 들 때가 많다 일단 해야해서, 안 하는것보단 나으니까 풀긴 푸는데 이걸 어디에 써먹을까 하는 느낌. 개발자는 비즈니스 문제를 풀어내는 사람들..

[TIL] JavaScript 알고리즘 100일 챌린지 18번째 도전

369 게임이다. 숫자가 주어지면 박수를 몇 번 쳐야하는지 횟수를 리턴하는 문제다. 나는 아래처럼 풀었는데 if 조건을 저렇게 길게 주지 말고, 변수로 하거나 아니면 이렇게 369를 배열에 넣어두고 includes 메소드를 활용하면 좀 더 가독성이 좋아질 것 같다 const nums = ['3', '6', '9'] 아래 영상에서는 match와 regex도 활용했다. regex를 많이 쓰지 않으니 잘 떠오르지 않는다.. https://youtu.be/8ww9zNwVEpc

[TIL] JavaScript 알고리즘 100일 챌린지 17번째 도전

숫자가 주어지면 그에 대응하는 문자열을 리턴하는 문제였다. 나는 객체로 하려다가 배열을 사용했는데 아래 주석 부분처럼 문자열도 가능하다. 그리고 배열에서 찾을때 나는 문자열로 된 숫자를 parseInt를 사용해서 숫자로 바꿔야겠다고 생각했는데 확인해보니 그럴 필요가 없었다. https://youtu.be/PxWJPsXLQEg

[TIL] JavaScript 알고리즘 100일 챌린지 16번째 도전

배열의 pop, shift, unshift 등의 메소드를 이용하여 주어진 배열의 원소들의 자리를 한 칸씩 왼쪽으로 또는 오른쪽으로 옮긴 후 리턴하는 문제였다. 나는 shft나 unshift 같은걸 사용하면 배열의 원소들이 하나씩 자리를 이동한다고 알고 있었기에 이 메소드들을 사용하지 않고 slice를 사용해서 새로운 배열을 만들어 리턴하는 방식으로 풀었는데 이 문제처럼 주어진 배열의 길이가 최대 20 이라면 상관 없을 것 같다. https://youtu.be/ytrnQnDT7tU