전체 글 110

[Programmers] JavaScript, 완전 탐색, 모의고사 문제

문제 1, 2, 3번 학생이 있다. 매개변수로 정답지가 배열로 주어지고, 각 학생은 나름의 찍는 패턴을 갖고 있다. 이때 가장 많이 맞춘 학생들을 오름차순으로 반환한다. programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 코드 풀이 첫 번째 함수 solution(answers)는 padEnd로 시작했다. 신규 아이디 추천 문제에서 padEnd를 처음 알게 돼서 연습 겸 사용해봤다. 우선 각 학생들의 찍는 패턴을 students 변수에 담는다. map을 돌며 매개변수로 주어진 answer의 length만큼, student라는 각 학생들의 찍는 패턴을 반복해서 넣어주었다. 만일 문제가 8문제라 하면 1..

[Programmers] JavaScript, 3진법 뒤집기 (toString(), parseInt(), reduce())

programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 문제 자연수 n이 주어질 때, n을 3진법으로 바꾸고, 이를 앞뒤로 뒤집는다. 이를 다시 10진법으로 변환한다. 코드 풀이 10진법을 2진법으로 바꾸는 로직과 동일하다. 2로 나눈 나머지 대신 3으로 나눈 나머지를 num에 담는 식이다. n이 3보다 작은 경우를 고려해 num += n을 잊지 말고 추가해준다. 10진법을 3진법으로만 바꾸는 데 그치지 않고 이를 뒤집기 때문에 위 같은 코드를 썼다. parseInt()는 문자열 인자를 구문분석해 특정 진수의 정수를 반환한다. 인자가 문자열이 아니라면 문자열로 변환한다. 뒤집힌 3진법은 문자열이고, 이..

[Programmers] JavaScript, 탐욕법, 체육복 문제 (Destructuring Assignment/fill)

programmers.co.kr/learn/courses/ 프로그래밍 강의 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 탐욕법 알고리즘 개요 탐욕법 알고리즘을 활용하는 문제. 탐욕법(Greedy Algorithm)은 동적 프로그래밍(또는 동적 계획법, Dynmaic Programming) 사용 시 지나치게 많은 일을 한다는 것에서 고안된 알고리즘이라고 한다. 두 방법은 서로 차이점이 존재하며, 보완하는 방식으로 활용이 된다고 한다. 동적 계획법은 전체 문제를 여러 개의 하위 문제로 쪼개어 풀고, 하위 문제의 해결 방법을 결합해 최종 문제를 해결한다. 피보나치의 수열이 대표적인 예이다. 이런 프로그래밍 방식은 효율을 위해 함수 결과 값을 저장하며 최종 결과물을 찾는다. ..

[Programmers] JavaScript에서 문자열 내 p와 y의 개수 구하기

문제 대문자, 소문자가 구분 없이 주어지는 문자열 s에서 p와 y의 개수를 구하고, 개수가 동일하면 true, 아니면 false를 반환한다. 이때 p와 y가 모두 하나도 없다면 항상 true를 반환한다. (개수 비교 시 대소문자 구분 X) programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 코드 풀이 str.match(정규식) 메서드는 일치하는 정규식 문자가 있을 때 이를 배열로 반환한다. 없으면 null을 반환한다. 문제에서 p나 y가 하나도 존재하지 않을 경우엔 항상 true를 반환하므로, 함수의 첫 번째 분기에는 str.match([p|y]/gi) === null 조건으로 분기해준다. 하나라도..

[Programmers] JavaScript에서 시저 암호문 만들기 (charCodeAt, fromCharCode())

programmers.co.kr/learn/challenges 코딩테스트 연습 기초부터 차근차근, 직접 코드를 작성해 보세요. programmers.co.kr 알파벳을 일정한 거리만큼 밀어서 새로운 문자를 만드는 시저 암호. 암호화 해야 할 문자열이 주어지고, 밀어야 하는 거리 n이 주어질 때 변환된 시저 암호를 반환하는 문제이다. (단, 공백은 아무리 밀어도 공백이다. 문자열은 알파벳 소문자, 대문자, 공백으로만 이루어져 있다.) 코드 문자열은 iterable한 객체이므로 for of 문법으로 문자 하나 하나를 검사했다. 공백일 경우에는 빈 공백을 반환되어야 할 새로운 문자열인 newStr에 더해주고, continue로 다음 반복문 프로세스를 진행한다. String.prototype.charCodeAt..

[React.js Hooks] useState, useEffect, useReducer

useState 기본 Hook에 속하는 useState. 상태 유지 값과 그 값을 갱신하는 함수를 비구조화 할당을 통해 반환한다. 처음 렌더링이 된 시점에 반환된 state 값은 useState이 두 번째 인자 값과 같다. 코드 상단에 useState를 import해준 뒤, 함수형 컴포넌트 내부에 const \[value, setValue\] = useState(0); 로 value의 초기 상태값을 useState의 파라미터를 통해 0으로 초기화해준다. 이후, +1, -1이라는 버튼을 클릭했을 때는 setValue 함수를 통해 기존 value에 1을 더한 값을 파라미터로, 상태를 업데이트해준다. setValue 함수는 새로운 state 값을 인자로 받아 컴포넌트 Re-rendering을 시킨다. 이후 렌..

👩‍💻/React 2021.02.28

[React.js로 만드는 Tech Blog] #5 언어 설정을 위한 react-i18next 라이브러리 사용하기/국제화 라이브러리(i18n)

2021/02/21 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #4 Window.scrollY/window.pageYOffset 2021/02/16 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #3 master 브랜치로 통합하기/github pages에 재배포하기 2021/02/13 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #2 react router 네비게이션 라이브러리 활용 2021/02/09 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #1 Figma 프로토타이핑/개발환경 세팅/Grommet UI Library/useState/Responsive Hea..

👩‍💻/React 2021.02.26

[ES2020] Nullish Coalescing Operator (null 병합 연산자 ??)

기존 || 연산자의 한계점 function isEnabled(options) { return console.log(options.enabled || true) } isEnabled({}); // true isEnabled({enabled: null}); // true isEnabled({enabled: false}); // true 속성 값인 false를 인식하지 못하고 true를 반환하고 있다. || 연산자는 좌항이 falsy한 경우 무조건 우항을 택한다. 하지만, 자바스크립트에서는 null, undefined뿐 아니라 false, 0, "", NaN 등 다양한 값을 falsy하게 여긴다. 또한 || 연산자는 첫 번째 truthy 값을 반환한다면(존재할 경우), ??는 첫 번째 defined value..

브라우저에 데이터 저장하기 : WebStorage(localStorage와 SessionStorage) & Cookie #2

WebStorage의 API - 두 객체 모두 동일한 메서드와 프로퍼티를 갖는다. setItem(key, value) // 키-쌍을 보관 getItem(key) // 키에 해당하는 값을 받아온다. removeItem(key) // 키와 해당 값을 삭제한다. clear() // 모든 것을 삭제한다. key(index) // 인덱스에 해당하는 키를 받아온다. length // 저장된 항목의 개수를 받아온다. - 두 스토리지 객체는 setItem/getItem/removeItem 메서드를 지원하는 것으로 보아 Map과 유사하지만, 인덱스를 사용해 키에 접근하는 방식은 다르다고 볼 수 있다. - 웹 스토리지 객체는 origin(domain/port/protocol)에 묶여 있다. (프로토콜과 서브 도메인이 다르..

👩‍💻/HTML5 2021.02.24

브라우저에 데이터 저장하기 : WebStorage(localStorage와 SessionStorage) & Cookie #1

Vuex를 사용해서 로그인 정보를 state에 저장하고, 페이지가 전환되어도 그대로 유지되도록 하는 방법을 찾다가, vuex의 state를 localStorage로 자동으로 동기화해주는 라이브러리 vuex-persistedState를 사용해봤다. 이전 프로젝트에서도 사이드바에 유저 정보가 바로바로 반영이 안 되거나, 렌더링이 원하는 타이밍에 제대로 되지 않는 이슈가 있었는데, Vue.js가 아무래도 SPA를 기반으로 하다보니, 이런 상황이 앞으로도 자주 발생할 것 같다는 생각이 들었다. 브라우저에 데이터를 저장하는 대표적인 방법은 HTML5에 포함된 자료 구조인 Web Storage의 localStorage, sessionStorage가 있다. 쿠키와 개념이 비슷하지만, 쿠키에서 조금 더 개선점을 가지는..

👩‍💻/HTML5 2021.02.24

[React.js로 만드는 Tech Blog] #4 Window.scrollY/window.pageYOffset

2021/02/09 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #1 Figma 프로토타이핑/개발환경 세팅/Grommet UI Library/useState/Responsive Header 만들기 2021/02/13 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #2 react router 네비게이션 라이브러리 활용 2021/02/16 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #3 master 브랜치로 통합하기/github pages에 재배포하기 이슈 작업물의 Preview 이미지를 클릭하면 확대되는 기능을 구현했는데, 이미지를 닫고 원래 페이지로 돌아오면, 브라우저 상단으로 올라가는 이슈가 있었..

👩‍💻/React 2021.02.21

[Programmers] 소수 찾기, 에라토스테네스의 체

문제 1부터 입력받은 숫자 n 사이에 있는 소수의 개수를 반환하는 함수, solution을 만들어 보세요. 소수는 1과 자기 자신으로만 나누어지는 수를 의미합니다. (1은 소수가 아닙니다.) 제한 조건 n은 2이상 1000000이하의 자연수입니다. 코드 풀이 주어진 숫자가 배열 형태가 아니므로, 첫 번째로 반복문을 등장시켜서 소수를 찾기 위한 숫자 집합을 만들어준다. 1은 자연스럽게 제외가 되니 2부터 시작해 n까지 배열에 넣어준다. 이때 arr[0], arr[1]은 채워지지 않아서 undefined이 될 것이지만, 구하는 것은 소수의 개수이므로 filter 메서드를 통해서 지워나갈 수 있다. 만들어진 배열을 순회하면서 소수가 아닌 수들을 제거해줄 목적으로 0을 넣어준다. i = 2일 때, i번째에 위치..

[Programmers] JavaScript에서 문자열 내림차순으로 정렬하기

문제 문자열 s에 나타나는 문자를 큰것부터 작은 순으로 정렬해 새로운 문자열을 리턴하는 함수, solution을 완성해주세요. s는 영문 대소문자로만 구성되어 있으며, 대문자는 소문자보다 작은 것으로 간주합니다. 제한 사항 str은 길이 1 이상인 문자열입니다. 입출력 예 ZbcdefggfedcbZ 코드 풀이 JavaScript의 sort() 메소드는 문자열의 유니코드 코드 포인트를 따른다. 유니코드에서는 대문자가 소문자보다 크므로, 주어진 문자열에 sort() 메소드를 적용하면 abcdef...ABCD... 순으로 정렬될 것이다. 이를 reverse() 메서드를 이용해 뒤집으면 ZYXW... fedcba 순으로 정렬될 것이다. 대문자가 소문자보다 작은 것으로 간주되므로 reverse() 메서드로 끝이 ..

[Programmers] JavaScript 크레인 인형 뽑기 게임

문제 게임 화면은 1 x 1 크기의 칸들로 이루어진 N x N 크기의 정사각 격자 위쪽에는 크레인이 있고 오른쪽에는 바구니가 존재한다. 모든 인형은 1 x 1 크기의 격자 한 칸을 차지한다. 게임 사용자는 크레인을 좌우로 움직여서 멈춘 위치에서 가장 위에 있는 인형을 집어 올리고, 집어 올린 인형은 바구니에 쌓이게 되는 데, 이때 바구니의 가장 아래 칸부터 인형이 순서대로 쌓인다. 제한 사항 board 배열은 2차원 배열로 크기는 5 x 5 이상 30 x 30 이하입니다. board의 각 칸에는 0 이상 100 이하인 정수가 담겨있습니다. 0은 빈 칸을 나타냅니다. 1 ~ 100의 각 숫자는 각기 다른 인형의 모양을 의미하며 같은 숫자는 같은 모양의 인형을 나타냅니다. moves 배열의 크기는 1 이상 ..

[React.js로 만드는 Tech Blog] #3 master 브랜치로 통합하기/github pages에 재배포하기

2021/02/09 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #1 Figma 프로토타이핑/개발환경 세팅/Grommet UI Library/useState/Responsive Header 만들기 2021/02/13 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #2 react router 네비게이션 라이브러리 활용 Github Pages에 배포된 기존 portfolio를 대체하기 위해서 second 라는 이름의 브랜치를 생성하고, 작업이 어느 정도 끝나서 second 브랜치를 master 브랜치로 아예 덮어쓰기를 진행하기로 했다. git checkout second git merge -s ours master git checkout ..

👩‍💻/React 2021.02.16

[Git] git commit history 삭제하기

사이드 프로젝트의 deployment와 관련해서 헤매느라 이런 저런 실험을 하느라 커밋 이력이 정리되지 않아서 한 번에 싹 정리할 필요가 생겼다. rm -rf .git git init git add . git commit -m "git history is removed" git remote add origin myRemoteGitRepoAddress git push -u --force origin master 삭제하고자 하는 git 이력이 있는 내 저장소로 cd 한 후, rm -rf 로 git 파일을 지워준다. 새롭게 git을 초기화해주고, 현재 파일 스테이징을 위해 git add 명령어를 실행한다. push 전 커밋 메세지를 작성해주고, 새로 git remote 주소 연결을 위해 origin으로 추가해..

👩‍💻/Git 2021.02.15

[React.js로 만드는 Tech Blog] #2 react router 네비게이션 라이브러리 활용

2021/02/09 - [👩‍💻/React.js] - [React.js로 만드는 Tech Blog] #1 Figma 프로토타이핑/개발환경 세팅/Grommet UI Library/useState/Responsive Header 만들기 [React.js로 만드는 Tech Blog] #1 Figma 프로토타이핑/개발환경 세팅/Grommet UI Library/useState/Responsive Header 테크 블로그 기획 기존에 GIthub Pages로 배포한 github.io 블로그를 가지고 있긴 했지만, 급할 때 템플릿 가지고 와서 고쳐 쓴 게 다라 레이아웃에 제약이 커 아예 새로 제작하기로 했다. 제작하며 여 uiyoji-journal.tistory.com 랜딩 페이지로만 꾸몄다면 네비게이션은 더 손 ..

👩‍💻/React 2021.02.13

[fontawesome] Argument of type 'IconPack' is not assignable to parameter of type 'IconDefinitionOrPack'

이슈 작업한 프로젝트를 github pages로 deploy하려고 npm install --save gh-pages을 실행시키고 나서 npm audit을 해보니, 몇 가지 패키지들이 사라져서 다시 npm install을 하고 나자 위 에러가 발생했다. 해결 github.com/FortAwesome/angular-fontawesome/issues/125 Argument of type 'IconPack' is not assignable to parameter of type 'IconDefinitionOrPack' · Issue #125 · FortAwesome/angular-f Describe the problem Trying to import fab icons to angular project, but c..

👩‍💻/Vue 2021.02.10

[React.js로 만드는 Tech Blog] #1 Figma 프로토타이핑/개발환경 세팅/Grommet UI Library/useState/Responsive Header 만들기

테크 블로그 기획 기존에 GIthub Pages로 배포한 github.io 블로그를 가지고 있긴 했지만, 급할 때 템플릿 가지고 와서 고쳐 쓴 게 다라 레이아웃에 제약이 커 아예 새로 제작하기로 했다. 제작하며 여태 안 써봤지만, 써봐야 할 것 같은 기술들을 몽땅 체험해보는 것이 목표. 새로운 테크 블로그에는 포트폴리오와 Reusme 그리고 Blog 기능까지 넣을 거라 디자인은 최대한 심플하게 하기로 했다. 계속 두고 두고 쓰게 될 웹 사이트이니 계획과 프로토타이핑에도 신경을 썼고, 어떤 기능을 최소한으로 갖출지, 어떤 부분은 앞으로 추가해서 써도 괜찮을지 등을 꼼꼼히 생각하며 디자인했다. Figma Prototyping 어쨌거나 Resume 역할을 하게 될 블로그이니 모바일로 볼 일이 더 많겠다 싶어 ..

👩‍💻/React 2021.02.09

[Vue-todo-list] #4 chart.js로 todo data 시각화하기 (2) - Pie Chart

2021/02/08 - [👩‍💻/Vue.js] - [Vue-todo-list] #3 chart.js로 todo data 시각화하기 (1) - Line Chart 2021/02/08 - [👩‍💻/Vue.js] - [Vue-todo-list] #2 카테고리가 있는 Todo List 만들기 2021/02/08 - [👩‍💻/Vue.js] - [Vue-todo-list] #1 Date 객체를 이용해 달력 숫자 구하기/지난 날짜, 오늘 날짜 구별을 위한 CSS 스타일링 Pie chart는 이전 포스팅에서 다뤘던 Line chart에 비해 엄청 엄청 쉬운 편에 속해 크게 고민하지 않고 import 해준 뒤 바로 썼다. import { Vue } from "vue-property-decorator"; import { ..

👩‍💻/Vue 2021.02.08