본문 바로가기

전체 글79

[백준 / JS] 1003. 피보나치 함수 ⭐ intro : 문제를 생각해나간 방식 피보나치, 팩토리얼... 대표적인 재귀함수로 풀어가는 문제이다. 다만 재귀함수의 경우 특정 return이 나올때까지 꾸준히 자신을 호출하기 때문에 시간복잡도가 O(2^n)이 되면서 특정 값을 찾게될때 시간을 엄청 잡아먹을 수 있게 된다. 그래서 이번엔 재귀로 풀어가보되, 효율적인 메모이제이션을 이용해서 풀어가보기로 했다. 시간복잡도는 O(1)의 속도로 획기적으로 줄인 케이스라고 볼 수 있겠다. ⭐ 풀이과정일단 문제에 알맞은 구현에 앞서서 피보나치 함수부터 구현해 보기로 했다. 캐싱으로 활용할 수 있는 방법으로는 class를 이용해서 피보나치 수열 값들이 캐싱(저장)될 수 있도록 생각해보았다. class로 생성된 인스턴스들은 prototype들로서 같은 값들을 공유.. 2025. 5. 9.
99클럽 코테 스터디 20일차 TIL - CD (백준 4158 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식 챌린지 마지막 문제라 쉬운문제를 내주었구만? 땡큐~ㅋ 하다가 큰코다쳤다. 아주그냥 시멘트바닥에 질질 끌렸다. 그동안 한눈팔면서 잘 보지 않았던 '이분탐색'을 그나마 맛보게 된 매운 케이스로 인지했다. 어쩐지 이중 for문을 이용해서 풀면 금방 풀텐데 왜 정답률이 처참한지 다시금 깨달았었다. 이 문제는 이중 for문을 사용하면 '절대' 풀 수 없다. 평소처럼 주어진 input을 내 입맛에 맞게끔 쪼개고 맛있는 객체로 만드는 요리과정도 이번에는 많은 절차를 바꿔야 했다. 왜 조건의 마지막 값에 '0 0'값을 주어지게 하는지 그 의도를 그냥 넘기지 말고 '왜' 넣었을지 파악했어야 했다. 전체 index 값을 알아야 했기에 생 날것의 input을 그대로.. 2025. 4. 28.
99클럽 코테 스터디 19일차 TIL - Sort 마스터 배지훈의 후계자 (백준 20551 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식 문제와 출력값, 입력값들을 골똘히 보면서 어떻게 풀어야할지 풀어나가야할 연결고리를 찾아내어 갔다.입력값의 첫번째 값은 원소A의 갯수를 나타낸다입력값의 두번째 값은 질문(조건)M의 갯수를 나타낸다입출력값이 전부 숫자만 보이므로 number값들로 계산하고 표현해야겠군?1번의 원소A의 값들을 오름차순으로 한번 정렬할 필요가 있겠군~ 이제 슬슬 각이 보인다원소A값들을 오름차순으로 정렬해보면 이렇게 나오게 되는군질문M이랑 대조해서 해당 값이 몇번째 index에 있는지 뽑아내면 되겠군?key, value값 할당이 편안한 Map()으로 만들어서 값들을 key로, 인덱스 값은 value로 지정해서 질문M 갯수만큼 순회해서 console.log로 뱉어내면 답이.. 2025. 4. 25.
99클럽 코테 스터디 18일차 TIL - 캠프가는 영식 (백준 1590 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식 피도 눈물도 없는 사악한 민식이를 혼쭐내주러 가는 영식이의 장렬한 스토리다. 코딩으로 어떻게 풀어야할까? 이번에도 마찬가지로 두 조건을 순회하면서 값을 비교하는 형식으로 코드를 만들어갔다. 코드문을 이해하고, 육안으로 테스트케이스까지 출력되게끔 만드는데는 오래 걸리지 않았는데 자꾸 틀렸다고 나와서, 도데체 무엇이 문제인지 오류를 찾는 부분에서 시간을 상당히 소요하게 되었다. 이번 문제의 오류 포인트는 infinity였다.... 버스 출발시간과 맞지 않으면 -1을 내뱉는 케이스에서, 결과값은 예상대로 잘 뱉는데 문제가 뭐지? 싶다가 해당 케이스에서 내 알고리즘 상에서 이 Infinity가 들어가는 부분을 발견하고야 만것이다. 이 케이스를 발견하는데.. 2025. 4. 24.
99클럽 코테 스터디 17일차 TIL - Find the Distance Value Between Two Arrays (리트코드 1385 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식 3개의 매개변수가 주어지되, 각각 1~3번이라 칭하고 1번(이하 arr1)과 2번(이하 arr2)의 각 요소끼리의 차잇값이 3번보다 같거나 작을경우의 매칭 경우의 수를 구하는 문제다. 앞서 풀었던 문제처럼 이중 for문으로 돌면서 각 요소끼리 조건을 순회해서 풀면 되겠다 싶었다. 다만 절대값을 구해야 하므로 차이값이 음수일 경우 '-'를 씌워주면 되겠다 싶었다. ⭐ 풀이과정 이번에도 매우 간단하게 풀었다. 항상 매 주의 이틀정도까지는 쉽게 풀었었던것 같다. 내일은 난이도가 확 올라가겠지...?ㅎ.. 일단 리턴값으로 넘겨줄 result 상수를 만들었다. 또 첫번째 배열을 순회할때 첫번째 값을 순회할 때마다 true, false에 따라 1이상이 올라.. 2025. 4. 22.
99클럽 코테 스터디 16일차 TIL - Intersection of Two Arrays (리트코드 349 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식 음... 이게 맞나? 싶을정도로 매우 간단하게 풀었다. 배열을 각각 순회하면서 중복값을 걸러주는 Set()에 저장해서, 해당 값을 바로 리턴. 사실 이게 시간복잡도로 치면 매우 느린 방식이라는것 나 또한 잘 인지하고 있다, O(num1길이 + num2길이) 만큼 걸릴것이므로... 이진탐색이 이론상으로는 절반 절반씩 줄여가면서 10억만개 요소라도 한 최대 12번 안으로 찾아낼 수 있는 방식이라는것도 얼추 알고있긴 하지만... 내 뇌는 두번째 인자가 2개 이상이고 원본배열이 홀수일 경우라는 조건에서 턱 막혀버렸다. 그래서 일단은 원시적인 방법으로 풀었다. 최악의 시간복잡도를 가지고 있다 할지언정... ⭐ 풀이과정 오늘은 크게 쓸것이 없다. 배열 한개.. 2025. 4. 22.
99클럽 코테 스터디 15일차 TIL - 학생 인기도 측정 (백준 25325 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식배열 반복문 문제이되 중복을 허용하는 방식으로 이해했었다. 애초에 문제에서 '내가 나를 좋아하는 예는 없다'라고 못밖아두었으니 한사람당 누구를 몇번 호출했는지 갯수를 세는 방식으로 생각했다. ⭐ 풀이과정 항상 input요소를 어떻게 분할할지가 문제의 첫번째 해결방안이 되는것 같다. 주어진 문제 조건이 크게 3종류로 나뉠 수 있으므로 3종류에 맞춰서 input을 자르도록 했고 앞 부분의 몇명인지 표기하는거는 굳이 쓰지 않을것 같아서 (왜냐하면 학생수 전체를 반복문 돌면 그 숫자니까...) 두번째, 세번째 부분만 구조분해할당으로 가져오도록 했다. (참고로 배열순서 기준으로 쓰지 않을 부분은 ' ,' 공백으로 남겨놓으면 된다) 변수명은 다음과 같은 기.. 2025. 4. 21.
99클럽 코테 스터디 14일차 TIL - 브실이의 입시전략 (백준 29723 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식이번에도 얼추 중복문제 추리는 문제일것으로 예상하고 Set() 쓰면 되려나 싶었는데 key, value값이 다 필요하더이다... 겸사겸사 다시 Map() 유형도 다시 파악할 수 있겠다 싶었다. 일단 문제는 금방 파악되었다. 첫줄에 브실이가 수강한 과목수 N, 대입전형에 필요한 과목수 M, 브실대학에서 공개한 과목수 K가 주어지고, 아래에는 N개수만큼 브실이의 성적들이 나열되고, 이어서 K개 개수만큼 필요한 과목수가 나열되어있다. 여기서 얼추 내가 생각한 방향은 다음과 같다input에 들어오는 매개변수의 정리브실이가 수강한 과목들을 오름차순으로 정렬정렬하면서 대학의 필수과목들을 각각 최소, 최대값에 저장해두고 Map에서 제거제거된 Map에서 최소, .. 2025. 4. 18.
99클럽 코테 스터디 13일차 TIL - 단어 정렬(백준 1181 / JavaScript) 오늘의 문제 링크 ⭐ intro : 문제를 생각해나간 방식 단어들 목록에서 중복값을 제거하고, 그 중복이 제거된 값을 이용해서 정렬하는 문제였다. Set() 자료구조를 얼추 익혔던 지라 이제 중복제거 문제는 저절로 손에 손이 가는듯 하다. sort 정렬 구문에 따로 콜백함수가 들어갈 수 있었다는 사실을 이제 알았고... (항상 단일로만 써서 숫자만 정렬했던 나 자신에 반성...) sort가 돌아가는 방식에 있어서 한번 더 공부해 볼 수 있었다. 생각보다 간단하게 풀 수 있었다. 특히 localeCompare()를 잘 몰라서 되게 해멨었다... ⭐ 풀이과정 앞선 문제와 마찬가지로 배열 구문의 input값들을 배열 구조분해 할당으로 분리해주고, 런타임에러가 발생하지 않도록 주어진 조건 갯수만 반복하도록 배열.. 2025. 4. 17.