dlaxodud2388의 등록된 링크

키자드에 등록된 총 395개의 포스트를 확인하실 수 있습니다.

Naver Blog

[BOJ 9465] 스티커 (Node.js)

https://www.acmicpc.net/problem/9465 9465번: 스티커 9465번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 스티커 다국어 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 49394 22962 15578 47.103% 문제 상근이의 여동생 상냥이는 문방구에서 스티커 2n개를 구매했다. 스티커는 그림 (a)와 같이 2행 n열로 배치되어 있다. 상냥이는 스티커를 이용해 책상을 꾸미려고 한다. 상냥이가 구매한 스티커의 품질은 매우 좋지 않다. 스티커 한 장을 떼면, 그 스티커와 변을 공유하는 스티커는 모두 찢어져서 사용할 수 없게 된다. 즉, 뗀... www.acmicpc.net 이 문제는 DP문제였다. 먼저 위의 스티커를 골랐을 때, 아래의 스티커를 골랐을 때, 아무것도 고르지 않았을 때 이렇게 총 3가지로 dp배열을 만들었다. 이후 아래와 같은 방법을 이용하여 문제를 풀 수 있었다. (dy 배열) (0번 값)

Naver Blog

[BOJ 1717] 집합의 표현 (Node.js)

https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 1717번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 집합의 표현 스페셜 저지 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 60384 19012 11515 28.173% 문제 초기에 {0}, {1}, {2}, ... {n} 이 각각 n+1개의 집합을 이루고 있다. 여기에 합집합 연산과, 두 원소가 같은 집합에 포함되어 있는지를 확인하는 연산을 수행하려고 한다. 집합을 표현하는 프로그램을 작성하시오. 입력 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,00... www.acmicpc.net 이 문제는 유니온파인드 문제였다. 아래와 같이 집합의 union연산과 find연산을 구현하여 문제를 풀 수 있었다. let set = Array.from({ length: nodes + 1 }, (v, i) => i); functi

Naver Blog

[BOJ 2252] 줄 세우기 (Node.js)

https://www.acmicpc.net/problem/2252 2252번: 줄 세우기 2252번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 줄 세우기 스페셜 저지 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 2 초 128 MB 30406 17262 11349 55.240% 문제 N명의 학생들을 키 순서대로 줄을 세우려고 한다. 각 학생의 키를 직접 재서 정렬하면 간단하겠지만, 마땅한 방법이 없어서 두 학생의 키를 비교하는 방법을 사용하기로 하였다. 그나마도 모든 학생들을 다 비교해 본 것이 아니고, 일부 학생들의 키만을 비교해 보았다. 일부 학생들의 키를 비교한 결과가 주어졌을 때, 줄... www.acmicpc.net 이 문제는 위상정렬 문제였다. 먼저 graph배열을 만들었고 4가 2보다 작고, 3이 1보다 작다면 [ [], [], [], [ 1 ], [ 2 ] ] 같이 4번 인덱스에 2, 3번 인덱스에 1을 넣어 주었다. 이후 check배열을

Naver Blog

[자료구조] 힙(Heap)의 개념 및 구현 (JavaScript)

1.힙(Heap)이란? 힙(Heap)이란 우선순위 큐(Priority Queue)를 위해 만들어진 자료구조이다. 완전 이진트리의 일종으로, 최대값과 최소값을 빠르게 찾기 위해 만들어진 자료구조이다. * 우선순위 큐는 말 그대로 큐에 우선순위 개념을 도입한 큐이다. 우선순위가 높은 데이터가 먼저 나가는 자료구조이다. 힙은 두 종류로 나눠진다. 최소 힙 : 부모 노드의 키 값이 자식 노드의 키 값보다 작은 힙 최대 힙 : 부모 노드의 키 값이 자식 노드의 키 값보다 큰 힙 여기서 키 값의 대소관계는 부모와 자식관계만 성립하고 형제 사이에는 대소관계가 정해지지 않는다. 아래 그림은 최소힙 예시이다. 2. 최소 힙(Min-Heap) 구현방법 힙은 배열을 이용하여 구현할 수 있다. 아래 그림과 같이 구현된다. 각 자식 노드들의 인덱스는 아래와 같이 계산한다. 왼쪽 자식노드 (부모 노드의 인덱스*2) + 1 오른쪽 자식노드 (부모 노드의 인덱스*2) + 2 먼저 아래처럼 최소힙 생성자 함수부터

Naver Blog

[FE] Gulp+babel을 이용한 SCSS 컴파일 자동화

SCSS는 CSS 전처리기 언어이기에 결국 CSS로 변환하는 과정을 거쳐야 한다. scss를 css로 변환하는 방법은 아래와 같다. $ npm install sass -g $ sass example.scss example.css sass가 전역 설치되었다는 가정 하에 "sass scss파일명 css파일명" 과 같이 해서 컴파일을 해줘야 사용할 수 있다. 이걸 매번 해준다면 매우 피곤할 것이다. 편하게 사용할 수 있는 방법이 있는데, 바로 gulp를 사용하는 것이다. 1. gulp란? gulp는 자동화 빌드 도구 중 하나이다. scss -> css 등의 반복적으로 수행되어야 하는 일들을 자동화해주는 툴이라고 보면 된다. 일련의 반복 작업들을 대신 처리해주다보니 개발 시간 단축에 도움을 준다. 앞서 말한 "반복적으로 수행되어야 할 일" 을 gulp에서는 "task"라고 부른다. (공식문서) https://gulpjs.com/docs/en/getting-started/async-compl

Naver Blog

[BOJ 9251] LCS (Node.js)

https://www.acmicpc.net/problem/9251 9251번: LCS 9251번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 LCS 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.1 초 ( 하단 참고 ) 256 MB 50747 20308 14952 40.296% 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 입력 첫째 줄과 둘째 줄에 두 문자열이 주어진다. 문자열은 알파... www.acmicpc.net 최장 공통 부분 수열의 길이를 출력하는 문제로, DP를 이용하여 풀 수 있었다. 이런 LCS문제의 경우 아래와 같이 2차원배열인 dy배열을 만들어 풀 수 있다. 모두 탐색하며 확인하는 문자열이 다른 경우 dy[i-1][k] 와 dy[i][

Naver Blog

[BOJ 9252] LCS2 (Node.js)

https://www.acmicpc.net/problem/9252 9252번: LCS 2 9252번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 질문 검색 LCS 2 스페셜 저지 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.1 초 ( 하단 참고 ) 256 MB 23286 8166 6299 39.051% 문제 LCS(Longest Common Subsequence, 최장 공통 부분 수열)문제는 두 수열이 주어졌을 때, 모두의 부분 수열이 되는 수열 중 가장 긴 것을 찾는 문제이다. 예를 들어, ACAYKP와 CAPCAK의 LCS는 ACAK가 된다. 입력 첫째 줄과 둘째 줄에 두 문자열이 주어진다. ... www.acmicpc.net 9251번 LCS문제와 거의 똑같은 문제였다. LCS의 길이와 LCS 자체를 출력하는 문제였다. DP를 이용하여 풀 수 있는 문제였고, 모두 탐색하며 확인하는 문자열이 다른 경우 dy[i-1][k] 와 dy[i][k-1] 중 큰 값을

Naver Blog

[BOJ 17212] 달나라 토끼를 위한 구매대금 지불 도우미(Node.js)

https://www.acmicpc.net/problem/17212 17212번: 달나라 토끼를 위한 구매대금 지불 도우미 17212번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 질문 검색 달나라 토끼를 위한 구매대금 지불 도우미 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 1 초 256 MB 1587 751 621 49.640% 문제 달나라 토끼들이 사용하는 화폐는 동전뿐이다. 동전의 종류는 1원, 2원, 5원, 7원 이렇게 4종류가 있다. 물건을 사고 동전으로 계산을 하는데 동전의 개수가 최소가 되도록 지불하지 않는 것은 불법이다. 예를 들어, 17원을 지불할 때 7원짜리 동전 1개와 5원짜리 동전 2개로 지불해야 합법이고, 7원짜리 ... www.acmicpc.net 제한사항에서 지불해야하는 금액이 최대 100000 이기에 이 문제는 dp를 이용하여 풀 수 있었다. 먼저 dy배열과 돈의 단위인 1,2,5,7이 들어있는 배열을 만들어준 뒤, 지불 금액으로 다 초기화

Naver Blog

[CSS] CSS Flex (Flexbox)

1. flexbox 사용 이유 flexbox란 화면의 크기가 동적으로 변할 때에도 효율적으로 요소를 배치할 수 있게 해주는 css3의 레이아웃 방식이다. 사용하는 이유를 확실하게 보고 가자. 아래와 같은 박스들이 있다고 해보자. 이를 flexbox 없이 같은 간격으로 나눈다고 해보자. 아래와 같이 margin-left를 사용하여 잘 나눴다. .p1 { height: 500px; } .c1 { width: 300px; height: 300px; background-color: yellow; border: 1px solid black; display: inline-block; } .c1:nth-child(2) { margin-left: 250px; } .c1:nth-child(3) { margin-left: 250px; } 얼핏 보기에는 잘 나눈 것 같지만, 사실 여기에는 큰 문제가 하나 있다. 작업하고있는 내 컴퓨터 안에서만 이렇게 보인다는 점이다. 픽셀로 margin-left를 준

Naver Blog

[오류모음] Error: Node Sass does not yet support your current environment : OS X Unsupported architec...

맥북 m1에서 node-sass를 사용하려고 했는데 위와 같은 오류가 발생하였다. https://stackoverflow.com/questions/64612707/node-sass-does-not-yet-support-your-current-environment-windows-64-bit-with-uns Node Sass does not yet support your current environment: Windows 64-bit with Unsupported runtime (88) I have tried to install gulp-sass latest version with npm i gulp-sass --save-dev in the begining I got a lot of errors but later solved them. But whenever I try to run gulp I got this error: Error... stackoverflow.com 위 링크를 보니

Naver Blog

[LeetCode] 75. Sort Colors (JavaScript)

https://leetcode.com/problems/sort-colors/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com sort메서드 없이 정렬을 하는 문제였다. 단 nums 레퍼런스는 유지해야하는 문제였다. 특정 소트를 짜서 풀려 하였으나 들어올 수 있는 원소가 0,1,2밖에 없는 것 때문에 그렇게 하지 않아도 풀 수 있는 문제였다. /** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ let sortColors = function (nums) { let zero = 0; let one = 0; let two = 0; le

Naver Blog

[LeetCode] 784. Letter Case Permutation (JavaScript)

https://leetcode.com/problems/letter-case-permutation/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 문자열이 들어오면 대문자와 소문자 조합으로 나올 수 있는 모든 케이스를 리턴하는 문제였다. DFS를 이용하여 풀 수 있는 문제였다. /** * @param {string} s * @return {string[]} */ let letterCasePermutation = function (s) { let answer = []; s = s.split(""); let numbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]; function DFS(str, idx) {

Naver Blog

[LeetCode] 198. House Robber (JavaScript)

https://leetcode.com/problems/house-robber Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 강도가 인접한 집을 털지 않고 가장 많은 금액을 털었을 때의 최대 금액을 리턴하는 문제였다. 각 집들은 배열로 주어졌다. 재귀로 풀 수는 있지만 그렇게 풀면 시간복잡도가 매우 커질 문제였기에 이 문제는 DP를 이용하여 풀 수 있는 문제였다. /** * @param {number[]} nums * @return {number} */ let rob = function (nums) { let curr = 0; let prev = 0; let temp; nums.forEach((v) => { temp = curr; curr = Math.max

Naver Blog

[LeetCode] 200. Number of Islands (JavaScript)

https://leetcode.com/problems/number-of-islands/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 0이 물이고 1이 땅일 때 상하좌우로 인접해있으면 하나의 섬으로 인식한다고 한다. 총 몇 개의 섬이 있는지 찾는 문제였다. DFS를 이용하여 1을 0으로 바꿔가며 풀 수 있는 문제였다. /** * @param {character[][]} grid * @return {number} */ let numIslands = function (grid) { let answer = 0; let dx = [1, 0, -1, 0]; let dy = [0, -1, 0, 1]; function DFS(x, y) { grid[y][x] = "0"

Naver Blog

[Linux] M1에서 UTM을 이용한 Ubuntu 설치

https://mac.getutm.app/ UTM Securely run operating systems on your Mac mac.getutm.app https://releases.ubuntu.com/20.04/ Ubuntu 20.04.4 LTS (Focal Fossa) Select an image Ubuntu is distributed on three types of images described below. Desktop image The desktop image allows you to try Ubuntu without changing your computer at all, and at your option to install it permanently later. This type of image is what most people will want to use. You will need... releases.ubuntu.com 먼저 두 링크에서 utm과 ubuntu 이미

Naver Blog

[LeetCode] 283. Move Zeroes (JavaScript)

https://leetcode.com/problems/move-zeroes/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 배열이 주어지면 0을 무조건 맨 끝으로 옮기는 아주 간단한 문제였다. splice와 push를 이용해 풀어주었다. /** * @param {number[]} nums * @return {void} Do not return anything, modify nums in-place instead. */ let moveZeroes = function (nums) { for (let i = nums.length - 1; i >= 0; i--) { { if (nums[i] === 0) { nums.push(0); nums.splice(i, 1);

Naver Blog

[프로그래머스] 큰 수 만들기 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/42883 코딩테스트 연습 - 큰 수 만들기 문제 설명 어떤 숫자에서 k개의 수를 제거했을 때 얻을 수 있는 가장 큰 숫자를 구하려 합니다. 예를 들어, 숫자 1924에서 수 두 개를 제거하면 [19, 12, 14, 92, 94, 24] 를 만들 수 있습니다. 이 중 가장 큰 숫자는 94 입니다. 문자열 형식으로 숫자 number와 제거할 수의 개수 k가 solution 함수의 매개변수로 주어집니다. number에서 k 개의 수를 제거했을 때 만들 수 있는 수 중 가장 큰 숫자를 문자열 형태로 return 하도록 solution 함수를 완성하세요. 제한 조건 number는 2... programmers.co.kr 스택을 만들어두고 하나씩 넣어두면서 뒤 수와 비교하며 문제를 풀 수 있는 그리디 문제였다. 1924의 경우 ['1'] -> ['9'] -> ['9', '2'] -> ['9', '4']

Naver Blog

[LeetCode] 242. Valid Anagram (JavaScript)

https://leetcode.com/problems/valid-anagram Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com t로 들어온 문자열이 s로 들어온 문자열과 동일한 알파벳 구성으로 이루어져있는지 확인하는 문제였다. 해시를 이용하여 풀 수 있는 문제였다. let isAnagram = function (s, t) { if (s.length !== t.length) return false; let answer = true; let hash = {}; s = s.split(""); t = t.split(""); s.forEach((v) => { if (hash.hasOwnProperty(v)) { hash[v] += 1; } else { hash[v]

Naver Blog

[BOJ 1463] 1로 만들기 (Node.js)

https://www.acmicpc.net/problem/1463 1463번: 1로 만들기 1463번 제출 맞힌 사람 숏코딩 재채점 결과 채점 현황 강의 1로 만들기 시간 제한 메모리 제한 제출 정답 맞힌 사람 정답 비율 0.15 초 ( 하단 참고 ) 128 MB 191033 61763 39281 32.033% 문제 정수 X에 사용할 수 있는 연산은 다음과 같이 세 가지 이다. X가 3으로 나누어 떨어지면, 3으로 나눈다. X가 2로 나누어 떨어지면, 2로 나눈다. 1을 뺀다. 정수 N이 주어졌을 때, 위와 같은 연산 세 개를 적절히 사용해서 1을 만들려고 한다. 연산을 사용하는 횟수의 최솟값을 출력하시오. 입력 첫째 ... www.acmicpc.net 이 문제는 dp문제였다. 1을 빼는경우 dy[N] = dy[n-1]+1 2로 나누어지는경우 dy[n] = dy[n/2] + 1 3로 나누어지는경우 dy[n] = dy[n/3] + 1 임을 이용하여 문제를 풀 수 있었다. const f

Naver Blog

[LeetCode] 1415. The k-th Lexicographical String of All Happy Strings of Length n (JavaScript)

https://leetcode.com/problems/the-k-th-lexicographical-string-of-all-happy-strings-of-length-n/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com a, b, c의 알파벳만 사용해서 문자를 만들 때, 연속되는 알파벳이 없는 문자열을 happy string이라고 한단다. n자리수까지 가능한 알파벳들을 구한 뒤, 그 알파벳들 중 k번째 문자열을 리턴하는 문제였다. 백트래킹을 이용하여 문제를 풀 수 있었다. 동일 문자열이 들어가지 않게 막고, k번째 문자열까지만 구할 수 있도록 하여 풀 수 있었다. /** * @param {number} n * @param {number} k * @return

Naver Blog

[LeetCode] 695. Max Area of Island (JavaScript)

https://leetcode.com/problems/max-area-of-island/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 0과 1로 이루어진 2차원 배열이 있을 때, 상하좌우 1로 이어진부분이 섬이다. 가장 큰 섬의 너비를 리턴하면 되는 문제였다. 깊이탐색을 통하여 풀 수 있는 문제였다. let maxAreaOfIsland = function (grid) { let answer = 0; let check = 0; let dy = [0, -1, 0, 1]; let dx = [1, 0, -1, 0]; function DFS(x, y, L) { check++; grid[y][x] = 0; for (let i = 0; i < 4; i++) { let

Naver Blog

[LeetCode] 64. Minimum Path Sum (JavaScript)

https://leetcode.com/problems/minimum-path-sum/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 좌측 상단에서 우측 하단의 배열까지 이동하며, 가장 작은 합의 값을 가지고 이동하도록 하는 문제였다. 조건에서 2차원 배열의 크기가 200*200까지 될 수 있었기에 이 문제는 DP문제였다. 위 모서리부분과 왼쪽 모서리부분은 무조건 한 방향으로만 더할 수 있기에, 먼저 더해준다. [ [ 1, 4, 5 ], [ 2, 5, 1 ], [ 6, 2, 1 ] ]과 같은 형태로 말이다. 이후 남은 칸들을 위와 왼쪽 칸 중 더했을 때 작은 값인 경우만 더해나가는 방법으로 풀 수 있었다. /** * @param {number[][]} gri

Naver Blog

[프로그래머스] 점프와 순간이동(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/12980 코딩테스트 연습 - 점프와 순간 이동 OO 연구소는 한 번에 K 칸을 앞으로 점프하거나, (현재까지 온 거리) x 2 에 해당하는 위치로 순간이동을 할 수 있는 특수한 기능을 가진 아이언 슈트를 개발하여 판매하고 있습니다. 이 아이언 슈트는 건전지로 작동되는데, 순간이동을 하면 건전지 사용량이 줄지 않지만, 앞으로 K 칸을 점프하면 K 만큼의 건전지 사용량이 듭니다. 그러므로 아이언 슈트를 착용하고 이동할 때는 순간 이동을 하는 것이 더 효율적입니다. 아이언 슈트 구매자는 아이언 슈트를 착용하고 거리가 N 만큼 떨어져 있는 장소로 가려고 합니다. 단, 건전지 사용량을 ... programmers.co.kr 이 문제는 DP문제였다. 짝수일경우 절반으로 나누고 홀수일경우 -1을 해주는 방법으로 진행해주어 풀 수 있었다. function solution(n) { let answer = N

Naver Blog

[프로그래머스] 네트워크 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/43162 코딩테스트 연습 - 네트워크 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로 연결되어 있을 때 컴퓨터 A와 컴퓨터 C도 간접적으로 연결되어 정보를 교환할 수 있습니다. 따라서 컴퓨터 A, B, C는 모두 같은 네트워크 상에 있다고 할 수 있습니다. 컴퓨터의 개수 n, 연결에 대한 정보가 담긴 2차원 배열 computers가 매개변수로 주어질 때, 네트워크의 개수를 return 하도록 solution 함수를 작성하시오. 제한사항 컴퓨... programmers.co.kr 문제 설명 네트워크란 컴퓨터 상호 간에 정보를 교환할 수 있도록 연결된 형태를 의미합니다. 예를 들어, 컴퓨터 A와 컴퓨터 B가 직접적으로 연결되어있고, 컴퓨터 B와 컴퓨터 C가 직접적으로

Naver Blog

[프로그래머스] 2개 이하로 다른 비트 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/77885 코딩테스트 연습 - 2개 이하로 다른 비트 양의 정수 x 에 대한 함수 f(x) 를 다음과 같이 정의합니다. x 보다 크고 x 와 비트가 1~2개 다른 수들 중에서 제일 작은 수 예를 들어, f(2) = 3 입니다. 다음 표와 같이 2보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 3이기 때문입니다. 수 비트 다른 비트의 개수 2 000...0010 3 000...0011 1 f(7) = 11 입니다. 다음 표와 같이 7보다 큰 수들 중에서 비트가 다른 지점이 2개 이하이면서 제일 작은 수가 11이기 때문입니다. 수 비트 다른 비트의 개수 7 000... programmers.co.kr 들어온 숫자보다 크고 비트가 1~2개만 다른 수 중 제일 작은 수를 리턴해야 하는 문제였다. 들어온 수가 짝수일 경우 마지막 비트는 무조건 0이기때문에 이 비트만 바꿔주고 계

Naver Blog

[LeetCode] 202. Happy Number (JavaScript)

https://leetcode.com/problems/happy-number/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 어떤 숫자가 주어진다면 그 숫자를 자리별 숫자들을 제곱해서 더하기를 반복합니다. 위 동작을 계속 반복하여 1이 된다면 happy number란다. happy number인지 확인하는 함수를 만들면 되는 문제였다. happy number가 아닌 2같은경우 2 -> 4 -> 16 -> 37 -> 58 -> 89 -> 145 -> 42 -> 20 -> 4 -> 16 과 같은 형태로 반복되어 happy number가 아니게 된다. 계속 재귀로 반복호출하며 만약 이미 나온숫자가 또나온다면 false, 1이 끝내 나온다면 true로 나오게하여

Naver Blog

[회고/계획] 07.06~09.20 회고 및 계획

07.06 ~ 09.20까지의 회고 및 계획이다. 굉장히 오랜만의 회고글이다. 일단 군생활은 36.2퍼정도?했는데 이쯤 되니 군생활은 완전히 적응된 듯 하다. 개발공부와 운동 모두 꾸준히 하려하고있긴 하다. 개발공부는 연등시간(22:00 이후)을 이용해 공부하고있다. 군에서 자기개발비용이라고 돈 지원해주는게 있는데 그 돈으로 토비의 스프링과 운영체제(공룡책)를 샀다. 토비의 스프링은 사고나서 보니 어차피 효율도 안날텐데 왜샀는지 모르겠다. 거의 공짜돈이라고 생각하고 써서그런가 충동구매를 한 듯 하다. 운영체제 책은 자바 성능 튜닝이야기 라는 책을 읽다가 jvm을 상세하게 파놓은 내용 등과 같은 이론적인 내용이 나올때마다 벽이 느껴지고, 이론공부가 확실히 효율이 잘나오면서 결국 나중에 큰 힘이될거같다는게 크게 느껴져 사서 공부하게 되었다. 그래서 요즘은 연등시간에 운영체제를 공부해보고 있다. 학교다닐때 별로 열심히 안들었었는데 잘좀 들었으면 훨씬 이해가 빨랐을텐데 하면서 아주 크게 후

Naver Blog

[회고/계획] 09.21~11.13 회고 및 계획

2020.09.21~2020.11.13까지의 회고 및 계획입니다. 약 두달?만의 회고글인것 같다. 군생활은 50퍼센트정도를 향해 달려가고있다. 대략 절반정도 했으니 지금까지 했던 걸 한번 더 하면 전역인 셈이다. 그런 의미에서 예전에 썼던 회고글들을 한번 보았다. 군대가기 직전 썼던 글에서 썼던 글에는 분명 코딩을 하기엔 효율이 잘 안나올테니 cs위주의 공부를 하고싶다고 했었고 클린코드도 읽어보고싶다고 썼었는데 지금보면 참 뻘짓도 많이한것 같다. (스프링책을사고 그랬으니...) 처음에 계획했던 http 동물책은 2번정도 깔짝 읽었다. 몇번 반복해서 읽어서 이해가 잘 간다 싶은 내용들도 있지만 사실 볼때마다 새로운 내용도 많고, 아직도 이해가 안가는 내용들도 많다. 무엇보다 공부를 연등시간을 이용해서만 하다보니 굉장히 자주 까먹는다...ㅎ 요즘은 cs공부에서 운영체제를 하고있다. os책중 공룡책을사서 책보고하려했는데 책으로는 도저히 안읽히고 재미도 없어서 책 사놓고 인터넷에서 강의를

Naver Blog

[회고/계획] 2020년 회고

2020년 회고글입니다. 2020년은 거의 대부분을 군대 안에서 보낸 해였다. 입대 전에는 군대 안에서 어떻게 시간을 보내야 군생활이 나중에 좋은 개발자로 성장하는데 밑거름이 될 수 있을까 고민을 정말 많이 했었다. 군대 자체가 공부하기 힘든 환경이라고 많이 들었던지라 확실하게 공부계획을 짜고 입대를 해야 많이는 아니더라도 어느정도는 얻어갈 수 있지 않을까 하는 생각이 컸었다. 이 때문에 입대 전부터 꾸준히 공부하는 습관을 이어나가야 군대에서도 할 수 있지 않을까 하는 생각으로 입대 전까지 안놓고 꾸준히 했던거 같긴 하다. 3월3일 입대였다. 지금 생각해보면 저때 그래도 안놓고 했던게 큰 도움이 됐던것 같다. 아마 저때 안했으면 입대 후 지금까지 안해왔을수도 있지 않을까 싶다. 이 외로, 아는 선배분들에게 따로 연락해 조언도 얻어보고 이곳저곳 알아보고 했었다. 그러다 결론적으로 하고자 했던 것은 예전 이 글 개발 공부 블로그 : 네이버 블로그 군대 2020.03.03 ~ 2021.0

Naver Blog

[회고/계획] 21.02.16~21.03.28 회고

코로나때문에 현지전역을 하는지라 전역이 대략 4달정도 남았다. 근 한달동안은 계속 부대에서 뭐가 있기도 하고 의욕도 예전만큼은 못한지라 쉬엄쉬엄 공부하는 느낌이다. 시간이나 빨리 가서 전역하고싶다는 생각이 자주 드는 요즘이다. 요즘은 계속 자바스크립트 관련해서 좀 깊숙하게 공부해보려 하고있다. 사실 공부라고 하기도 모호한게 그냥 궁금한거나 처음보는내용 있으면 적어놨다가 주구장창 서핑해보고 이런내용 저런내용 공책에 정리했다가 나중에 엮어서 이해해보려 하는? 느낌이다. 최근에는 자바스크립트 엔진 동작하는 것 같은거나 가비지컬렉션 원리 이런거 보고있는데, 막상 하려고 앉으면 그냥 궁금해서 알아보게 된다. 그러다보니 요즘 드는 생각인데 이렇게 시간에 쫒기지 않으면서 그냥 궁금했던 내용이나 원리같은 내용들을 찾아보고 알아볼 수 있는 때가 이런 군생활 하고있을 때 말고 또 올까 싶긴 하다. 공부양이 많지는 않지만 이것도 정말 나쁘진 않은 것 같다. 저번에 자바스크립트 엔진의 히든클래스 관련해서

Naver Blog

[OS] 메모리 관리기법 페이징(Paging)

1. 페이징이란? https://blog.naver.com/dlaxodud2388/222399647477 [OS] 외부 메모리 단편화(External Fragmentation)과 연속 메모리 할당방식 최초적합(First-fit) 최적적합(Best-fit) 최악적합(Worst-fit) 일반적으로 우리가 컴퓨터를 부팅을 하고 나면 메인메모리의 상태는 아래와 같을것이다. 운영체제를 제외하... blog.naver.com 위 글에서 나왔던 내용처럼, 연속 메모리 할당(Contiguous Memory Allocation) 방식으로 메모리를 할당하게 되면 외부 메모리 단편화(External Fragmentation)라는 문제를 해결하기 어려워 메모리를 제대로 사용하지 못하는 현상들이 발생한다고 했었다. 이 문제는 "프로세스는 꼭 하나로 통째로 넣어야 한다"는 생각을 깨뜨리고, 프로세스를 잘게 잘라 메모리에 할당한 뒤 프로세스가 하나로 붙어있는 것처럼 보이게 CPU를 속이는 방법으로 문제를 해결

Naver Blog

[프로그래머스] JadenCase 문자열 만들기(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/12951 코딩테스트 연습 - JadenCase 문자열 만들기 문제 설명 JadenCase란 모든 단어의 첫 문자가 대문자이고, 그 외의 알파벳은 소문자인 문자열입니다. 문자열 s가 주어졌을 때, s를 JadenCase로 바꾼 문자열을 리턴하는 함수, solution을 완성해주세요. 제한 조건 s는 길이 1 이상인 문자열입니다. s는 알파벳과 공백문자(" ")로 이루어져 있습니다. 첫 문자가 영문이 아닐때에는 이어지는 영문은 소문자로 씁니다. ( 첫번째 입출력 예 참고 ) 입출력 예 s return "3people unFollowed me" "3people Unfollowed Me" "for ... programmers.co.kr 코드는 아래와 같다. function solution(s) { let a; let word = s.split(" "); for(let i = 0;i<word.leng

Naver Blog

[OS] TLB(Translation Lookaside Buffer)와 유효 접근 시간(Effective Access Time)

우리는 외부 메모리 단편화 현상을 막기 위해 페이징(Paging)이라는 기술을 사용한다. 이 페이징이라는 기술을 사용하기 위해서는 CPU가 내는 논리 주소를 물리 주소로 바꾸는 이런 주소 변환 과정이 필요하다. 이러한 일을 하는 MMU를 "페이지 테이블(Page Table)" 이라고 하는데, 우선 이 페이지 테이블을 어떻게 만들었을지부터 한번 생각해보자. 1. CPU에 넣기 2. 메인메모리에 넣기 CPU에 넣는다고 한번 생각해보자. 주소 변환이 빠르긴 하겠지만, 메모리가 아닌 CPU에 페이지 테이블을 넣는다면 페이지 테이블의 엔트리를 담기에는 너무 작을 것이다. 그럼 메인메모리를 생각해보자. 페이지 테이블의 엔트리는 크게 만들 수 있을 것이다. 하지만 속도가 많이 느릴 것이기에 부적합할 것이다. 결론적으로는 빠른 캐시메모리를 만들 때 쓰는 SRAM을 이용해서 이 페이지 테이블을 만들었는데, 이를 TLB(Translation Lookaside Buffer)라고 한다. 그럼 이 TLB를

Naver Blog

[회고/계획] 20.03.03~21.07.31(군생활) 회고 및 계획

계속되는 코로나로 인해 21.07.31 토요일 오늘, 미복귀 휴가(현지전역)를 출발하였다. 20.03.03부터 21.07.31까지 군생활을 해오는동안 여러 회고글들을 작성했었는데, 작성했던 이 글들을 기반으로 군생활을 회고해볼까 한다. 입대 전 회고 및 계획글 우선 위 글은 맨 처음 입대 전에 작성했던 글인데, 보면 CS위주의 지식들을 공부들을 해야겠다!를 생각하고 들어갔었다. 입대 전 회고 및 계획글 그래서 위에서 말했던 대표적인 CS지식들로 HTTP와 OS를 언급했었다. 자대배치 후에 짬을 내서 공부하겠다고 했었는데, 훈련소에서 책 받아서 일병 중순~말까지 공부했던 것 같다. 물론 확실하게 공부했고 공부했던 내용들을 확실히 기억한다고는 절때 말 못한다. 공부하면서 작성했던 게시들을 한번 쭉 보던가 해야겠다고 생각한다. OS는 작년 11월인가 공룡책을 사서 시작했었다. 근데 사고나니 책으로 공부하기 너무 어려워 무료 인터넷 강의 하나 있길래 그걸 들으며 했었다. 근데 그 강의 절반

Naver Blog

[프로그래머스] 프린터(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/42587?language=javascript 코딩테스트 연습 - 프린터 일반적인 프린터는 인쇄 요청이 들어온 순서대로 인쇄합니다. 그렇기 때문에 중요한 문서가 나중에 인쇄될 수 있습니다. 이런 문제를 보완하기 위해 중요도가 높은 문서를 먼저 인쇄하는 프린터를 개발했습니다. 이 새롭게 개발한 프린터는 아래와 같은 방식으로 인쇄 작업을 수행합니다. 1. 인쇄 대기목록의 가장 앞에 있는 문서(J)를 대기목록에서 꺼냅니다. 2. 나머지 인쇄 대기목록에서 J보다 중요도가 높은 문서가 한 개라도 존재하면 J를 대기목록의 가장 마지막에 넣습니다. 3. 그렇지 않으면 J를 인쇄합니다. 예를 들어, 4개의 문서(A, ... programmers.co.kr function solution(priorities, location) { let answer = 0; let prioritiesindex = []; //

Naver Blog

[프로그래머스] 기능개발(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/42586 코딩테스트 연습 - 기능개발 프로그래머스 팀에서는 기능 개선 작업을 수행 중입니다. 각 기능은 진도가 100%일 때 서비스에 반영할 수 있습니다. 또, 각 기능의 개발속도는 모두 다르기 때문에 뒤에 있는 기능이 앞에 있는 기능보다 먼저 개발될 수 있고, 이때 뒤에 있는 기능은 앞에 있는 기능이 배포될 때 함께 배포됩니다. 먼저 배포되어야 하는 순서대로 작업의 진도가 적힌 정수 배열 progresses와 각 작업의 개발 속도가 적힌 정수 배열 speeds가 주어질 때 각 배포마다 몇 개의 기능이 배포되는지를 return 하도록 solution 함수를 완성하세요.... programmers.co.kr 매일 작업속도만큼 개발이 완료되기 때문에 우선 반복문을 돌리며 작업 진도를 최신화해준다. 최신화해주며 제일 앞에 있는 기능이 완료되었는지를 확인한다. 완료되었다면 그 뒤의 기능들도 완료가

Naver Blog

[프로그래머스] 최댓값과 최솟값(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/12939 코딩테스트 연습 - 최댓값과 최솟값 문제 설명 문자열 s에는 공백으로 구분된 숫자들이 저장되어 있습니다. str에 나타나는 숫자 중 최소값과 최대값을 찾아 이를 "(최소값) (최대값)"형태의 문자열을 반환하는 함수, solution을 완성하세요. 예를들어 s가 "1 2 3 4"라면 "1 4"를 리턴하고, "-1 -2 -3 -4"라면 "-4 -1"을 리턴하면 됩니다. 제한 조건 s에는 둘 이상의 정수가 공백으로 구분되어 있습니다. 입출력 예 s return "1 2 3 4" "1 4" "-1 -2 -3 -4" "-4 -1" "-1 -1" "-1 -1" programmers.co.kr function solution(s) { let answer = []; let arr = s.split(" "); answer.push(Math.min.apply("",arr)) answer.push(Ma

Naver Blog

[프로그래머스] 피보나치 수(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/12945 코딩테스트 연습 - 피보나치 수 문제 설명 피보나치 수는 F(0) = 0, F(1) = 1일 때, 1 이상의 n에 대하여 F(n) = F(n-1) + F(n-2) 가 적용되는 수 입니다. 예를들어 F(2) = F(0) + F(1) = 0 + 1 = 1 F(3) = F(1) + F(2) = 1 + 1 = 2 F(4) = F(2) + F(3) = 1 + 2 = 3 F(5) = F(3) + F(4) = 2 + 3 = 5 와 같이 이어집니다. 2 이상의 n이 입력되었을 때, n번째 피보나치 수를 1234567으로 나눈 나머지를 리턴하는 함수, solution을 완성해 주... programmers.co.kr 맨 처음 이 문제를 보고 재귀함수를 사용해 풀었었다. 그 결과 시간초과가 났었고, 이유는 n번째 피보나치 수를 계산하기위해 항상 0부터 다 계산하기 때문이였다. 결국 배열에 저장해 계산

Naver Blog

[프로그래머스] 피로도 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/87946 코딩테스트 연습 - 피로도 XX게임에는 피로도 시스템(0 이상의 정수로 표현합니다)이 있으며, 일정 피로도를 사용해서 던전을 탐험할 수 있습니다. 이때, 각 던전마다 탐험을 시작하기 위해 필요한 "최소 필요 피로도"와 던전 탐험을 마쳤을 때 소모되는 "소모 피로도"가 있습니다. "최소 필요 피로도"는 해당 던전을 탐험하기 위해 가지고 있어야 하는 최소한의 피로도를 나타내며, "소모 피로도"는 던전을 탐험한 후 소모되는 피로도를 나타냅니다. 예를 들어 "최소 필요 피로도"가 80, "소모 피로도"가 20인 던전을 탐험하기 위해서는 유저의 현재 남은 피로도는 8... programmers.co.kr 보유한 피로도를 기준으로 최대 몇 개의 던전을 돌 수 있는지 구하는 문제였다. 각 던전을 돌기 위해선 그 던전의 최소 보유 피로도 이상의 피로도를 보유해야 돌 수 있었다. 이 문제는 최소 보

Naver Blog

[프로그래머스] 배달 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/12978 코딩테스트 연습 - 배달 N개의 마을로 이루어진 나라가 있습니다. 이 나라의 각 마을에는 1부터 N까지의 번호가 각각 하나씩 부여되어 있습니다. 각 마을은 양방향으로 통행할 수 있는 도로로 연결되어 있는데, 서로 다른 마을 간에 이동할 때는 이 도로를 지나야 합니다. 도로를 지날 때 걸리는 시간은 도로별로 다릅니다. 현재 1번 마을에 있는 음식점에서 각 마을로 음식 배달을 하려고 합니다. 각 마을로부터 음식 주문을 받으려고 하는데, N개의 마을 중에서 K 시간 이하로 배달이 가능한 마을에서만 주문을 받으려고 합니다. 다음은 N = 5, K = 3인 경우의 ... programmers.co.kr 이 문제는 다익스트라를 이용해 풀 수 있는 문제였다. 풀이 방법은 아래와 같다. 1. 우선 각 노드에 대한 정보들을 가지고있는 인접리스트를 생성하였다. 2. 다익스트라를 위해 distance를

Naver Blog

[LeetCode] 169. Majority Element (JavaScript)

https://leetcode.com/problems/majority-element/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 들어와있는 배열의 원소들 중 배열의 원소 수/2 보다 많이 들어온 수를 리턴하는 문제였다. 이 문제는 간단한 해시문제였다. 아래와 같은 방법으로 풀 수 있었다. let majorityElement = function (nums) { let half = nums.length / 2; let map = {}; nums.forEach((v) => { if (map.hasOwnProperty(v)) { map[v] += 1; } else { map[v] = 1; } }); for (let a in map) { if (map[a] >=

Naver Blog

[LeetCode] 11. Container With Most Water (JavaScript)

https://leetcode.com/problems/container-with-most-water/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 하나의 배열이 주어졌을 때 위 그림과 같은 형태로 통을 만들 수 있다면 최대한 많이 담을 수 있는 통의 상태에서 물의 양을 구하는 문제였다. 제한사항에서 배열의 크기가 최대 10^4였다. 그렇기에 이 문제는 투포인터를 이용하여 O(n)으로 풀 수 있었다. lt와 rt중 작은 것으로 계산한 뒤 작았던 것을 ++또는 --해주는 방식으로 풀었다. let maxArea = function (height) { let max = Number.MIN_SAFE_INTEGER; let lt = 0, rt = height.len

Naver Blog

[LeetCode] 155. Min Stack (JavaScript)

https://leetcode.com/problems/min-stack Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com minStack이란걸 구현하는 문제였다. min값을 추출하는 기능이 있는 스택이란다. stack이 min값또한 가질 수 있게 하여 풀 수 있었다. var MinStack = function () { this.stack = []; }; /** * @param {number} val * @return {void} */ MinStack.prototype.push = function (val) { let min = this.stack.length === 0 ? val : this.stack[this.stack.length - 1][1]; this.

Naver Blog

[LeetCode] 78. Subsets (JavaScript)

https://leetcode.com/problems/subsets Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 정수 배열이 주어졌을 때 가능한 중복을 제외한 모든 하위 집합을 찾는 문제였다. DFS로 모든 경로에 대해 탐색하여 풀 수 있었다. let subsets = function (nums) { let answer = []; function DFS(L, arr) { answer.push(arr); for (let i = L; i < nums.length; i++) { DFS(i + 1, arr.concat(nums[i])); } } DFS(0, []); return answer; };

Naver Blog

[LeetCode] 70. Climbing Stairs (JavaScript)

https://leetcode.com/problems/climbing-stairs/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 이 문제는 DP문제였다. 메모이제이션을 이용하여 풀 수 있었다. /** * @param {number} n * @return {number} */ let climbStairs = function (n) { let memo = Array.from({ length: n + 1 }, () => 0); memo[1] = 1; memo[2] = 2; function DFS(result) { if (memo[result] > 0) return memo[result]; else { return (memo[result] = DFS(result

Naver Blog

[LeetCode] 496. Next Greater Element I (JavaScript)

https://leetcode.com/problems/next-greater-element-i/ Level up your coding skills and quickly land a job. This is the best place to expand your knowledge and get prepared for your next interview. leetcode.com 배열1과 배열2가 주어졌을 때 배열 1의 원소를 배열 2에서 찾아 인덱스를 구한 뒤 그 인덱스의 오른쪽만 쭉 탐색하여 그 수보다 큰 수 중 처음 만나는 수를 저장하는 문제였다. 말 그대로 구현하면 되는 간단한 문제였다. /** * @param {number[]} nums1 * @param {number[]} nums2 * @return {number[]} */ let nextGreaterElement = function (nums1, nums2) { let answer = []; nums1.forEach((v) =>

Naver Blog

[Node.js] Puppeteer를 이용한 웹 매크로 만들기

https://github.com/puppeteer/puppeteer puppeteer은 node.js에서 쓰이는 웹 자동화 API중 하나이다. p...

Naver Blog

[React 오류] Next.js Global CSS cannot be imported from files other than your Custom &lt;App&gt; 오류 해결

Next.js를 사용하며 css를 설정하다보면 아래와 같은 오류를 만날 수 있다. 이 오류는 css간의 충돌을 막...

Naver Blog

[CSS] Position 속성(static, relative, absolute, fixed)

css에는 position이라는 속성이 있다. 이 position속성은 이름 그대로 요소들의 위치를 지정하기 위해 존재...

Naver Blog

[프로그래머스] 오픈채팅방 (JavaScript)

문제 설명 카카오톡 오픈채팅방에서는 친구가 아닌 사람들과 대화를 할 수 있는데, 본래 닉네임이 아닌 가...

Naver Blog

[CSS] 박스 모델(Box Model)

우리가 만드는 모든 HTML의 엘리먼트들은 &quot;박스 모델(Box Model)&quot;이라는 구조로 이루어져 ...

Naver Blog

[프로그래머스] 단어 변환 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/43163 문제 설명 두 개의 단어 begin, target과 단어...

Naver Blog

[JavaScript] ES5 이후의 Execution Context(실행 컨텍스트)의 동작 방식과 Lexical Nesting Structure(Scope chain)

ES5를 기점으로 Execution Context의 동작하는 방식과 구조가 많이 달라졌다. 이 블로그의 예전 포스팅...

Naver Blog

[프로그래머스] 구명보트 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/42885 이 문제는 투포인터를 사용하여 풀 수 있는 그...

Naver Blog

[NestJS] typeorm-seeding과 @faker-js/faker를 이용한 데이터베이스 시딩(Seeding)

데이터베이스 마이그레이션을 하고나면 초기 데이터들을 임의로 넣어주고 싶을 때가 있다. 그럴 때 사용하...

Naver Blog

[프로그래머스] 양궁대회(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/92342 1. 문제설명 카카오배 양궁대회가 열렸습니다....

Naver Blog

[LeetCode] 47. Permutations II (JavaScript)

https://leetcode.com/problems/permutations-ii 문제에 쓰여있는대로 단순히 순열을 구하는 문제였다. 사...

Naver Blog

[자료구조] 이진탐색트리(BST)의 개념 및 구현 (JavaScript)

1. 이진탐색이란? 이진탐색트리에 대해 이야기 하기 전에 이진 탐색에 대해 먼저 이야기하겠다. 이진 탐색...

Naver Blog

[LeetCode] 62. Unique Paths (JavaScript)

https://leetcode.com/problems/unique-paths 이 문제는 DP문제였다. DFS나 BFS로 쭉 돌리면 시간...

Naver Blog

[React] useCallback()을 이용한 렌더링 성능 최적화

React 공식문서에 나와있는 useCallback()을 확인해보면 아래와 같다. 보면 메모이제이션된 콜백을 반환...

Naver Blog

[React] 부모-자식 컴포넌트 간의 데이터 전달 방법

리액트를 사용하다보면 부모 컴포넌트와 자식 컴포넌트 사이에서 데이터를 주고받아야 할 일들이 있다. 1. ...

Naver Blog

[LeetCode] 79. Word Search (JavaScript)

https://leetcode.com/problems/word-search/ 글자들이 들어있는 보드가 주어졌을 때, word인자에 들어온 ...

Naver Blog

[LeetCode] 22. Generate Parentheses (JavaScript)

https://leetcode.com/problems/generate-parentheses/ 들어온 인자만큼 괄호로 이루어진 문자열을 만들 때...

Naver Blog

[LeetCode] 46. Permutations (JavaScript)

https://leetcode.com/problems/permutations/ 문제 제목대로 순열을 구하는 문제였다. 백트래킹을 이용하...

Naver Blog

[React] React에서 Redux-Toolkit(RTK)을 이용한 상태 관리

redux-toolkit은 redux 팀에서 만든 공식적인 개발 도구이다. redux를 사용하다 보면 단점이 몇 가지 있는...

Naver Blog

[프로그래머스] 게임 맵 최단거리 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/1844 0,0 지점에서 우측 하단까지 최대한 빨리 갈 때...

Naver Blog

[React] JSX란?

react를 사용하며, 우리가 사용하는 브라우저의 dom에 엘리먼트를 추가하기 위해서는 먼저 react의 virtual...

Naver Blog

[오류모음] Mac OS 업데이트 후 git 오류 (xcrun: error: invalid active developer path)해결

mac os 업데이트 후 갑자기 깃이 안되는 상황을 마주했다. 원래 업데이트하면 자주 이런다고 한다. 이 오류...

Naver Blog

[프로그래머스] k진수에서 소수 개수 구하기(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/92335 n이라는 숫자가 들어오면 우선 이 숫자를 k진...

Naver Blog

[프로그래머스] 신고 결과 받기 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/92334 이 문제는 구현문제였다. 유저들의 신고를 종...

Naver Blog

[프로그래머스] 전력망을 둘로 나누기 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/86971 전선으로 연결되어있는 n개의 송전탑을 가진 ...

Naver Blog

[React] redux-saga를 이용한 side effect 관리

https://github.com/redux-saga/redux-saga 1. Redux-Saga란? redux-saga는 axios요청같이 데이터를 가져...

Naver Blog

[LeetCode] Combination Sum 2 (JavaScript)

https://leetcode.com/problems/combination-sum-ii/ 이 문제는 백트래킹을 통해 풀 수 있었다. 들어온 배...

Naver Blog

[프로그래머스] 카펫 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/42842 이 문제는 완전탐색 문제였다. 기본적으로 카...

Naver Blog

[프로그래머스] 가장 먼 노드 (JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/49189 이 문제는 그래프문제였다. 최대 20000까지 있...

Naver Blog

[회고/계획] 2021년 회고 및 계획

2020년 회고글을 군대에서 썼던게 엊그제같은데 벌써 2022년에 2021년 회고글을 쓴다니 뭔가 신기하다. 분명 22살이였는데 군대한번갔다왔더니 24살인것도 뭔가 이상하다. (블로그를 만든지도 3년이 되어간다..!) 2020년 회고글을 쓸 때 위 내용을 썼었다. 군대에서 개발공부를 하며 효율적인 공부방법을 찾아내고싶어했고 무탈히 전역도 하길 바란다 썼었는데, 둘 다 무난하게 잘 된 것 같다. 군대에서 효율적인 공부방법을 찾아내는건 전역을 하며 해결을 했다. ㅎㅎ... 1년 반동안 군생활하면서 개발자로서 크게 성장을 했다고 보긴 어럽지만, 기본기들도 조금 쌓고 개발 감을 잃지 않은것만 해도 다행인게 아닐까 싶다. 코로나로 인해 전역을.......

Naver Blog

[LeetCode] 3Sum (JavaScript)

https://leetcode.com/problems/3sum/ 정수형 배열이 들어오면 그 중 3개의 합이 0이되는 조합을 구하는 문제였다. 문제 조건을 보면 배열 요소가 최대 3000까지 들어오는 문제였기에 O(N^2)안으로 풀어야 하는 문제였다. 이 문제는 투포인터를 이용하여 풀 수 있었다. 우선 오름차순으로 들어온 배열을 정렬해줬다. 그 뒤 첫 반복문에서 값 하나를 고정해준 뒤 두번째 반복문에서 투포인터를 이용해 O(N^2)로 풀 수 있었다. 미리 오름차순으로 정렬해줬기에 고정된 값이 0 이상이되면 더이상 돌지 않게 하였고, 중복을 막기 위해 고정할 값이 이전 고정값과 같으면 돌지 않게 해주는 방식으로 풀었다.

Naver Blog

[2021 마이 블로그 리포트] 블로그 빅데이터로 알아보는 '2021 내 블로그 스타일'

2022년 화이팅!

Naver Blog

[NestJS] NestJS에서 RiotAPI를 사용하여 롤토체스 게임데이터 가져오기

우선 아래 링크로 접속한 뒤 로그인을 해주자. https://developer.riotgames.com/ 로그인을 하면 약관 동의 화면이 나오는데, 다 확인해주면 개발자 계정을 생성할 수 있다. 생성하고나면 아래와 같은 화면을 볼 수 있다. 위에 가려져있는 키가 api키이다. 키 만료는 24시간 뒤 되고, api요청은 1초에 20번, 2분에 100번만 가능하다. 1. API문서 api사용법은 api탭에 들어가면 다 나와있다. 롤토체스의 게임 데이터를 가져온다고 하면 순서는 아래와 같다. 사용자닉네임 -&#62; 사용자의 puuid추출 -&#62; puuid를통한 최근 게임 매칭 아이디 가져오기 -&#62; 게임 매칭 아이디를 통해 게임 결과 데이터 가져오기 우선 아래와 같은 방법으로 puuid를.......

Naver Blog

[LeetCode] Valid Parentheses (JavaScript)

https://leetcode.com/problems/valid-parentheses/ 괄호가 올바르게 짝지어져있는지 확인하는 문제였다. 큐와 스택 개념을 이용하여 풀었다.

Naver Blog

[LeetCode] Add Two Numbers (JavaScript)

https://leetcode.com/problems/add-two-numbers/ 링크드리스트 문제였다. l1 리스트 [2,4,3] (342) 와 l2 리스트[5,6,4] (465)가 있다 했을 때 342+465를 하여 나온 값인 807을 [7,0,8]형태로 담으면 되는 문제이다. 문제에서 구현해둔 링크드리스트를 이용하여 풀면 되는 문제였다. 문자열로 바꾸어 응용하는식으로 문제를 풀었다.

Naver Blog

[LeetCode] Reverse Integer (JavaScript)

https://leetcode.com/problems/reverse-integer/ 문제 그대로 입력받은 숫자를 뒤집으면 되는 문제이다. 단, 입력받은 문자가 [-2^31, 2^31-1] 범위를 넘어가면 0을 찍어주어야한다. 문자열로 변환하여 문제를 풀었다. 범위가 넘어가는 경우는 따로 지정해주는 부분에서 Number.MAX_SAFE_INTEGER를 사용해볼까했으나 number범위가 2^53 사이인지 이번에 처음 알았다. Math.pow(2,31)로 지정해주어 풀수 있었다.

Naver Blog

[LeetCode] 3Sum Closest (JavaScript)

https://leetcode.com/problems/3sum-closest/ 정수 배열 하나가 주어지면 여기서 3가지 수를 뽑아 더한 뒤 target과 가장 비슷한 값을 찾는 문제였다. 처음은 아래와 같이 풀었다. DFS로 문제를 해결하였는데 맞긴했으나 효율적인 코드는 아니였다. 아래는 다른사람 풀이이다. 배열을 정렬한 뒤 순서대로 값을 더해가며 값을 찾는 방법으로 풀었다. DFS로 풀었을 때와 다르게 시간복잡도를 O(n^2)로 가져가며 풀 수 있다는걸 확인할 수 있다.

Naver Blog

[LeetCode] Combination Sum (JavaScript)

https://leetcode.com/problems/combination-sum/ candidates배열에 있는 원소들 합이 target과 같은 배열들을 리턴하는 문제였다. 단 배열에 있는 숫자는 무한으로 선택할 수 있고, 이렇게 나온 배열에서 원소의 순서만 다른 조합들은 고유다는 조건이 있었다. 마지막 조건으로 고유 조합의 수가 150개 미만인 것이 보장이 되었다. 이 문제는 DFS를 이용해 풀 수 있었다. 코드는 아래와 같다. 반복문을 돌리며 i를 startIndex로 지정하여 [2,2,3][2,3,2][3,2,2] 가 동시에 나올 수 있는 상황을 막는 방법으로 풀었다.

Naver Blog

[LeetCode] Letter Combinations of a Phone Number (JavaScript)

https://leetcode.com/problems/letter-combinations-of-a-phone-number/ 그림과 같은 영어를 포함한 번호판이 있을 때, digits에 들어온 내용대로 문자 조합들을 반환하는 문제이다. 단 1은 digits에 포함되지 않는다. 위와 같이 DFS를 이용해 문제를 풀 수 있었다.

Naver Blog

[JavaScript] 다른 언어와는 다른 조금 특별한(?) 자바스크립트의 배열

자바스크립트에서 사용하는 배열은 정말 우리가 알고있는 그런 배열일까? 우리가 별 생각없이 쓰던 자바스크립트 배열의 실체에 대해 알아보자. 1. 자바스크립트에서 배열이란? 사실 자바스크립트에는 우리가 일반적으로 생각하는 배열이라는게 존재하지 않는다. 자바스크립트의 배열은 그냥 우리가 아는 객체( {} )일 뿐이다. 위 코드를 보면 일반적인 방식으로 객체를 생성했고, 이 객체의 __proto__프로퍼티만 수정해주니 object가 아닌 Array로 인식을 하기 시작했다. 프로퍼티 명을 0, 1, 2 이런식으로 이루어져 있고, length프로퍼티가 존재하며 프로토타입 체인을 탔을 때 Array.prototype으로 연결되어있는 객체가 바로 우리가 쓰는 배열.......

Naver Blog

[Node.js] Express 서버에서 Redis를 이용한 HTTP 세션 관리

세션(Session)이란 일정 시간 동안 같은 브라우저(사용자)로부터 들어오는 요구를 상태로 보고 그 상태(State)를 일정하게 유지시키는 기술이다. 이 세션과 passport를 이용하여 로그인을 구현하곤 하는데, 문제는 서버를 재시작하게되면 세션이 날아가버리게 된다. 사용자들이 특정 서비스를 이용하던 도중, 어떤 기능에 문제가 생겨 서버가 재시작되었다고 해보자. 로그인을 포함하여, 세션을 이용해 동작하던 것들이 모두 리셋될 것이다. 이를 막기 위해서, 일반적으로 Redis같은 DB를 사용한다. Redis는 NoSQL DB임과 동시에, In-memory 형태의 DB라 속도가 빠르다보니 캐시와 세션 저장소로 사용하곤 한다. 그럼 이제 사용방법을 알아보자. .......

Naver Blog

[NestJS 오류] TypeError: (0 , cookie_parser_1.default) is not a function

코드를 짜던 중 아래와 같은 오류를 만났다. import때문에 발생한 문제이다. tsconfig.json에 들어가 &#34;esModuleInterop&#34;: true를 추가해주자.

Naver Blog

[React] Redux 사용 이유와 Next.js 프로젝트에 Redux 적용하기

1. Redux 사용이유 Redux가 무엇인지 알아보기 전에 아래 예시를 먼저 들겠다. 아래와 같이 버튼(자식 컴포넌트)을 눌렀을때 부모 컴포넌트에 속해있는 input text의 value를 state를 통해 수정해주는 코드가 있다고 해보자. React에서 자식 컴포넌트에서 부모 컴포넌트의 state를 수정해야 하는 상황인 것이다. 그렇게 되면 아래 코드와 같이 좀 피곤한 상황이 생길 것이다. 심지어 여기서 자식의 자식의 자식 컴포넌트가 부모 컴포넌트의 state를 수정하고 쓰고 해야하는 상황이라면 더더욱 코드가 복잡해질 것이다. useState()등을 이용한 React의 state 관리의 경우 결국에는 컴포넌트에 종속될 수밖에 없기에, 결국에는 관리하기 복잡해지는.......

Naver Blog

[React 오류] Attempted import error: 'Switch' is not exported from 'react-router-dom'.

create-react-app을 통해 만든 react프로젝트에서 페이지 전환을 위해 react-router-dom을 사용하던 중 아래와 같은 오류가 발생했다. 분명히 import { Switch } from &#x27;react-router-dom&#x27;이 있는데 대체 무슨상황인가 하고 보니 버전문제였다. 5버전에서는 Switch로 사용했었는데, 6버전에서는 Routes로 수정되었고, element에 컴포넌트를 넣는 방식으로 사용한단다.

Naver Blog

[오류모음] [ERR_PACKAGE_PATH_NOT_EXPORTED]: Package subpath ~~~ package.json 해결

react프로젝트를 클론받아 yarn start를 했는데 아래와 같은 오류가 발생했다. 쓰고있던 Node.js 버전문제때문에 발생한 문제란다. Node 버전을 lts버전으로 내려야 했다. lts버전으로 내리기 위해 nvm부터 받아야 했다. 이후 nvm -v를 통해 설치를 확인했는데 버전이 뜨지 않았다. 따라서 환경변수를 설정해주어야했다. 우선 ~/ 위치로 가준 뒤 .nvm디렉토리를 만들자. 이후 아래와 같이 ~/.bash_profile을 수정하러 들어간 뒤 아래 내용을 넣어주자. 넣었다면 command+c 후 :wq하고 나오자. 마지막으로 아래 명령어를 쳐주자. 이제 nvm이 설치되었는지 확인하자. 되었다면 node를 lts버전으로 내리자. 이를 통해 Error [ERR_PACKAGE_PATH_NOT_E.......

Naver Blog

[JavaScript] 이터레이터(Iterator)와 제너레이터(Generator)

이터레이터에 대해서는 이 글에서 배열과 비교하며 설명했었다. 이터레이터에 대해 다시 간단하게 설명하자면 iterator라는 이름 그대로 반복 처리가 가능한 객체를 의미한다. 이터레이터는 아래의 두가지 조건을 만족한다. 1. next()라는 메서드를 가진다. 2. next()의 리턴값은 꺼낸 값이 저장된 &#34;value&#34;라는 프로퍼티와 반복이 끝났는지 확인하는 boolean값이 들어간 &#34;done&#34;이라는 프로퍼티를 가져야 한다. 위에서 말한 이터레이터를 발생시키는 함수를 제너레이터 함수라고 한다. 제너레이터 함수는 실행이 연속적이지 않은 함수이다. 다시말해, 실행을 중간에 멈출 수 있는 함수로, 사용자가 원할 때 멈추고 재개하고 할.......

Naver Blog

[Node.js 오류] [ERR_UNESCAPED_CHARACTERS]: Request path contains unescaped characters 해결

express 서버에서 axios를 통해 다른 서버로 요청을 보내다 아래와 같은 오류를 만났다. axios를 통해 요청을 하는 주소에 한글이 들어가있었는데, 그 한글을 읽지 못해 발생한 오류이다. 이는 encodeURIComponent()를 통해 해결할 수 있는 문제이다.

Naver Blog

[LeetCode] Two Sum (JavaScript)

https://leetcode.com/problems/two-sum/ nums라는 정수형 배열과 target이라는 정수 하나가 인자로 주어진다. nums 배열의 인자들 중 두 값을 더했을 때 target값이 되는 배열의 인덱스를 리턴하는 문제이다. 처음에는 제약조건을 제대로 보지 않고 문제를 풀었더니 nums가 굉장히 많은 테스트케이스에서 결국 시간초과가 났다. 이 문제는 map객체를 이용해 문제를 풀 수 있었다. nums가 [2,7,11,15]에 target이 9라했을 때, map에 target - nums[index] : index형태로 넣어둔다. &#x27;7&#x27;:0 과 같은 형식으로 넣어두다가 maps[&#x27;7&#x27;]과 같이 만났을 때 map에 들어있다면 value들을 return하는 방식으로 풀었다. 백준에서 자바스크.......

Naver Blog

[Git 오류] error: Your local changes to the following files would be overwritten by merge

git pull을 하다 아래와 같은 오류를 마주쳤다. 이 경우 stash명령어를 통해 해결할 수 있다. 현재 경로의 버전관리되고있는 내용을 임시저장해두는 상태라고 보면 된다. 이후 pull을 해준다. 이제 임시저장해뒀던 내용을 pop해 stash했던 내용을 다시 가져오자.

Naver Blog

[프로그래머스] 뉴스 클러스터링(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/17677 들어오는 문자열을 받아 2개씩 묶은 뒤 여기서 교집합과 합집합을 구해 계산하는 문제였다. 여기서 받은 문자열에 만약 숫자나 특수문자가 들어가있다면 그 문자열은 집합에서 제외해야했다. 우선 각 문자열을 2개씩 뽑아 검사한뒤 배열에 넣어줬고, 그렇게 나온 배열들을 이용해 합집합과 교집합을 구한 뒤 계산하여 문제를 풀었다. 작성한 코드는 아래와 같다. 교집합을 구할때 set을 쓰고 싶었으나 문제의 3번케이스같은 경우는 어떻게 해야할지 감이 잘 안와 그냥 같은 배열을 하나 더 만들어 이를 이용해 합집합과 교집합을 구했다. 이후 교집합이 0인경우 0리턴, 합집합이 0인경.......

Naver Blog

[프로그래머스] 수식 최대화(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/67257 연산할 연산자가 3개밖에 없기에 순서 경우의 수가 6개밖에 없었다. 그렇기에 그 경우의 수를 미리 배열에 담아두었다. 이후 인자로 들어온 식을 [&#x27;3&#x27;,&#x27;+&#x27;,&#x27;1&#x27;....]와 같은 형태로 만들었다. (정규표현식 쓴 분들이 많았지만 본인은 쓸 줄 모르기에 못썼다...) 위에서 저장해뒀던 6개의 경우의수와 바꾼 형태의 식을 함께 돌리며 가장 큰 계산 결과를 얻어내는 방식으로 풀었다.

Naver Blog

[프로그래머스] n^2 배열 자르기(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/87390 위와 같은 느낌의 배열을 일차원배열로 풀었을 때 특정 인덱스의 배열 부분을 반환하는 문제였다. 맨 처음에는 아무 생각없이 그냥 그대로 구현한 뒤 특정 인덱스를 반환하도록 풀었었다. 배열에 다 담아버리니 메모리초과가 났다. 문제를 보니 n이 10^7까지 갈 수 있는 걸 보고 아래 코드처럼 배열에 넣지 않고 right부분까지만 계산하도록 해보았다. 결과는 아래와 같이 시간초과가 나버렸다. 결국 left부터 right부분까지만 계산할 수 있도록 하는 방법을 생각해야했고 left와 n을 이용하여 시작점의 좌표를 구할 수 있는 것을 알아냈다. 그리고 그 특정한 좌표에 있는 숫자는 x좌.......

Naver Blog

[프로그래머스] 괄호 회전하기(JavaScript)

https://programmers.co.kr/learn/courses/30/lessons/76502 큐와 스택을 사용해 풀 수 있는 문제였다. 여는괄호와 닫는괄호를 구별하고 인덱스를 맞춘 뒤 문자열을 배열로 잘라줬다. 배열을 하나씩 순회하며 &#x27;(&#x27;가 들어오면 0, &#x27;{&#x27; 가 들어오면 1, &#x27;[&#x27;가 들어오면 2를 배열에 넣어줬다. 그러다 닫는괄호가 들어오면 그 닫는 괄호가 들어있는 close_bracket에서의 인덱스와 비교해 push하거나 Pop하거나 했다. 이렇게 만든 로직을 문자열을 바꿔가며 실행해주며 풀었다.

Naver Blog

[JavaScript] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy)

1. 선행 지식 자바스크립트에서 값은 크게 두 가지로 나뉜다. 바로 원시 타입(Primitive Type)과 참조 타입(Reference Type)이다. Primitive Type의 경우 String, Number, Boolean, Null, Undefined, Symbol, Bigint 이렇게 7가지로 이루어져 있고, Reference Type의 경우 Object, Function 이렇게 두 가지로 이루어져 있다. (Array, Set, Map 등은 Object에 포함된다.) 그리고 자바스크립트 엔진에 대해 잠깐 이야기하겠다.(V8엔진이라고 가정하겠다.) V8을 통해 어떠한 프로그램이 실행되었다면, 이 프로그램은 우리 컴퓨터 메모리의 빈 공간에 할당 될 것이고, 이 할당된 공간을 우리는 &#34;Resident Set&#34;이라고 한다. 이 &#34;Reside.......

1 2 3 4