프로그래머스[JS] > 택배 상자 꺼내기
·
🔒Algorithm
➕문제링크https://school.programmers.co.kr/learn/courses/30/lessons/389478 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🔨문제풀이상자가 쌓여있는 구조와 비슷한 2차원 배열을 만들어서 문제를 풀 수 있었다. ( 주어진 조건을 고려하면 2차원배열을 사용하여 순회를 하여도 시간초과가 나지 않을거라고 생각되었다. ) 예를들어 n=12 w=5 num=9 이면 아래와 같은 2차원배열을 만들어서 column index가 1인 2,9,12 를 순회화면서 값을 구할 수 있었다.function solution(n, w, num) { let map = []; ..
React19 useActionState 활용 예시
·
⭐FE
🧩배경react 19 에 도입된 `useActionState` hook 학습한뒤 해당 hook을 활용한 예시를 만들어보았다.🧩useActionState 특징`useActionState`는 form action의 결과를 기준으로 state를 업데이트 하는 훅`const [state, formAction, isPending] = useActionState(fn, initialState, permalink?)` 와 같이 사용Canary versions 에서는 `useFromState`로 불림hook이지만 서버컴포넌트에서도 사용 가능하다.  반드시 tag 내부에서 사용해야함 🧩활용예시`useActionState`를 이용하여 위와 같은 화면을 만들어 보았다. 위 화면의 동작 흐름은 아래와 같다.첫 화면 렌..
프로그래머스[JS] > 유연근무제
·
🔒Algorithm
➕문제https://school.programmers.co.kr/learn/courses/30/lessons/388351 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🔥풀이큰 어려움 없이 풀 수 있었다. 정한 시간의 +10 분까지 출근하면 되기 때문에 `schedules[i]` 에 +10 을 한뒤 60분을 넘어가면 시간을 +1 하는 변환과정을 거쳤다. function solution(schedules, timelogs, startday) { let answer = 0; for (let i = 0; i = 60) { goal += 100; goal -=..
프로그래머스[JS] > 완전범죄
·
🔒Algorithm
🧩문제링크https://school.programmers.co.kr/learn/courses/30/lessons/389480 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🧩문제풀이➕dfs로 접근 -> 실패 ( 시간초과 )dfs로 푼 문제풀이다. 하지만 시간초과가 났다.function solution(info, n, m) { let dp = Array.from({ length: info.length + 1 }, () => { return Array(m).fill(Infinity); }); dp[0][0] = 0; for (let r = 1; r { if..
백준[JS] > 1920번 수 찾기
·
🔒Algorithm
문제https://www.acmicpc.net/problem/1920풀이자바스크립트 set 객체를 이용해 풀면 쉽게 풀 수 있다. 일단 A[1] ... A[N] 으로 주어진 수를 set객체에 담고 주어진 M개의 수를 순회하면서 set.has 메서드를 이용해 수가 set객체에 존재하는 지 확인 하고 이를 asnwer에 반영하여 문제를 풀었다.let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim().split("\n");let arr = input[1].split(" ").map((n) => Number(n));let set = new Set([...arr]);let numberArr = input[3].split("..
React Server Component
·
⭐FE
🧩배경Nextjs를 사용하면서 자연스레 서버컴포넌트를 사용해왔지만 따로 포스팅으로 정리하는 시간을 가지진 않아 각잡고 React 공홈에서 Server Component 파트를 읽고 정리해보는 시간을 가졌다. 🧩React 19 부터 stable react 18v Server Component Part를 보면 Canary 표시가 되어있는데 19v부터는 사라졌고 stable이라고 언급되었다. 🧩소스코드로 비교아래에는 React 19 공식 홈페이지에 올라온 예시코드로 같은 기능을 클라이언트 컴포넌트, 서버 컴포넌트 각각 이용해서 구현했을 때의 소스코드이다. 보면서 느끼겠지만 서버 컴포넌트가 훨씬 코드가 짧고 개인적으로 더 직관적이다. ( 물론 이외에도 여러 장점/단점이 있다. ) 클라이언트 컴포넌트로 구현..
JavaScript 일반함수, 화살표 함수 this
·
⭐FE
✅배경라이브러리의 원본 코드를 보면 객체의 메서드로 this가 꽤나 많이 사용됨을 알 수 있었고 대부분 화살표 함수대신 일반함수를 사용하길래 왜 es6 화살표함수가 아닌 일반함수를 사용했을까 라는 생각을 했었다. 그러는 와중에 this가 가리키는게 화살표함수와 일반함수에서 차이가 있음을 예전에 알게 되었고 이를 깊게 파다보니 꽤나 혼란스럽다는 생각이 들었다. 그래서 이를 포스팅으로 정리하고자 한다.   ✅사전지식`객체의 메서드로 호출` / `객체의 메서드가 아닌 그냥 호출` 이 경우를 일단 구분할 줄 알아야한다.   ✅객체의 메서드로 호출될때 `일반함수`:  함수의 스코프를 this로 가리킨다. 단 호출방법에 따라 동적으로 this가 정의된다. (1번/3번)`화살표함수`: 화살표 함수의 스코프의 상위스코..
프로그래머스[JS] > 지게차와 크레인
·
🔒Algorithm
✅문제https://school.programmers.co.kr/learn/courses/30/lessons/388353 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr🔥풀이문제를 풀 때 주의해야 할 사항이 몇가지 있는데 다음과 같다지게차로 컨테이너를 꺼낼 때 한번에 꺼내야 한다 -> 만약에 'A' 라는 출고 요청이 들어올 경우 아래와 같은 경우 맨 바깥에 있는 A만 꺼낼수 있다. 맨 바깥의 A를 꺼냈으니 빈공간이 생겼다고 가정하고 안쪽 A까지 꺼낸다고 가정 할 경우 답이 틀린다.크레인으로 꺼낸 빈공간으로 인해 지게차로 꺼낼 수 없는 컨테이너를 꺼낼 수 있으므로 지게차로 컨테이너를 꺼내기 전 반드시 크..
프로그래머[JS] > 서버 증설 횟수
·
🔒Algorithm
문제https://school.programmers.co.kr/learn/courses/30/lessons/389479 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr풀이시간대별로 현재 서버갯수를 파악할 수 있는 servers Array를 생성하고 시간대별 유저수를 탐색하면서 증설해야되는 서버가 필요 시 이를 servers에 추가하면서 증설횟수를 카운트 하여 답을 구할 수 있었다. function solution(players, m, k) { let servers = Array(24).fill(0); let answer = 0; players.forEach((playerCnt, sTime..
백준[JS] > 1436번 영화감독 숌
·
🔒Algorithm
문제https://www.acmicpc.net/problem/1436풀이'666' 이라는 연속적인 숫자를 포함한 수들을 작은순으로 구했을 때 n번째 수를 구해야하는데 String.includes 함수를 이용해서 '666'을 포함한 수인지를 계속체크하면 n번째 작은 수를 구할 수 있다. number를 0부터 1씩 계속증가시키면서 '666'을 포함하는지 지속적으로 체크했다. ( 다행히 n이 10,000 이하의 수라고 제한이 걸려 있어 해당 풀이는 문제없다고 판단했고 문제를 풀 수 있었다. ) // https://www.acmicpc.net/problem/1436let fs = require("fs");let input = fs.readFileSync("/dev/stdin").toString().trim();..