전체 글 42

코드그라운드 개구리 뛰기

1년전 쯤 풀었던 코드그라운드 개구리 뛰기 문제입니다. 지금도 코드그라운드 사이트가 있는지 모르겠습니다만 알고리즘을 공유하는 차원에서 포스팅합니다. 코드그라운드 사이트 특징 1. 내가 제출한 문제의 득점을 확인할 수 있다. 예를 들어 아래 코드의 경우에는 100점으로 통과하였지만 통과 전까지 20, 40 점의 득점을 거쳐서 완성된 코스이다. 어디에서 잘못되었는지는 알려주지 않지만 다시 코드를 검토해보면서 완벽을 만들어가는 재미가 있다. 2. 다른 사람들이 제출한 코드를 확인할 수 있다. - 실력향상을 위해서라면 미리 보지 않는 것을 추천한다. 3. 정답을 맞히면 포인 트까 쌓여서 랭킹을 확인할 수 있다. - 학교별 랭킹 순위가 제공된다. *** 아래는 내가 최근에 풀었던 코드 그라운드 spsc예선 문제 ..

알고리즘 2019.10.24

자바스크립트 이터레이터란

자바스크립트 이터레이터를 구글에 검색해 보면 다음과 같은 정의가 나온다. "이터레이터는 ECMA2015부터 반영된 자바스크립트 반복기이다." 반복기..? 반복기가 도대체 뭐지..? 뭘 돌리는 기계 같은데.. 전혀 이해가 안 갔다. 나뿐만 아니라 많은 사람들도 헷갈리는 표현이라는 생각이 들었다. 그래서 이터레이터를이터레이터를 다음과 같이 더 쉽게 표현해보고자 한다. 이터레이터를 쉽게 풀어서 한 문장으로 정의하자면, 이터레이터란,모든 순회할 수 있는 객체(대표적으로 배열, 스트링)의 원소에 하나하나에 접근할 수 있는 능력을 가진 객체이다. 다만, 개별 원소에 접근하는 방식에는 일정한 규칙을 따라야지 이터레이터이다. 여기서 말하는 일정한 규칙이란 이터레이터 프로토콜이다. 즉 접근하는 방법이 객체마다 다르지 않..

javascript 2019.10.24

리액트 웹팩 기본 설정하기

웹팩 설정의 큰 흐름 1. 엔트리 파일을 설정한다. 2. 엔트리 파일에 모듈의 옵션을 적용한다. 3. 추가적으로 플러그인까지 적용한다. 4. 아웃풋으로 나온다. 이와 같이 큰 흐름을 알고 접근하면 웹팩설정을 이해하기 쉽다. ​ 설치 모듈 npm i -D webpack webpack-cli npm i -D babel-loader @babel/core npm i -D @babel/preset-env // 옛날 브라우저에서도 사용 가능한 코드로 변환 npm i -D @babel/preset-react //jsx사용 가능하게 변환 webpack.config.js const path = require('path') module.exports = { name: 'word-relay-setting', mode: 'd..

react 2019.10.24

[BFS] 백준 미로탐색 자바스크립트(Node.JS) 버전

자바스크립트(node.js)로 이루어진 알고리즘 풀이가 구글검색 결과에 거의 없는것 같습니다. 이 포스트가 자바스크립트로 알고리즘을 공부하시는 분들께 도움이 되면 좋겠습니다. BFS의 원리 BFS탐색기법에서는 큐(Queue)가 핵심입니다. 큐를 활용하여서 BFS를 구현할 수 있기 때문입니다. 큐가 BFS를 구현할 수 있는 원리는 선입선출(FIFO _ first in first out) 구조이기 때문입니다. 구체적으로 설명하자면, 한 노드와 연결되어 있는 자식 노드(하위레빌)가 일단 큐에 들어가게 되고 그 자식노드와 연결되어 있는 자식노드(하위레벨)는 큐의 맨 뒤로 들어가게 되는 것입니다. 그리하여 상위레벨의 탐색이 먼저 이루어지고 난 뒤 자식노드로의 접근이 이루어 지게 되는 것입니다. BFS는 어떻게 최..

알고리즘 2019.10.24

암호화에서 해시(hash)란 무엇인가?

해시(hash) 란 무엇인가? 해시란 원형문자(plaintext)가 해시함수(해시 엔진)를 통과하여 암호화되어 나온 결과물을 뜻한다. 그리고 해시함수(해시엔진)를 통과하는 과정을 해싱(hashing)이라고 한다. 13 곱하기 29 가 무엇인지 누가 물으면 377이라는 것을 금방 알 수 있다. 하지만 반대로 몇과 몇을 곱하면 377이 나오냐라고 물어보면 무수히 많은 경우의 수가 있다. 이것이 해싱의 기본원리이다. 실제 사용자가 입력한 비밀번호가 해시함수를 통과하여 해시가 된다. 이 해시의 원형을 알아 내려면 많은 경우의 수가 필요하여 복호화(암호해독)가 어렵다. 이것이 해싱을 통한 비밀번호 암호와의 기본원리이다. 다만 해싱에도 단점이 있는데 비밀번호가 같으면 해시가 무조건 같다. 예를들어 md5라는 해시 ..

기타 2019.10.22

자바스크립트 클로저와 호이스팅

클로저란 함수와 스코프 사이의 폐쇄적 관계이다. 좀 더 구체적으로 다음과 같이 정의해 보았다. 정의 1. 클로저란 독립된 스코프를 참조하는 함수다. 정의 2. 클로저란 내부함수에서 외부함수의 렉시컬 스코프를 참조하는 관계다. 굉장히 추상적이기에 실제코드와 사전개념을 학습해야 이해가 쉽다. 사전 개념으로서 스코프와 호이스팅을 먼저 이해해야 한다. 스코프란 스코프는 영어 뜻 그대로 범위이며, 자바스크립트는 함수레벨 스코프 var를 갖는게 특징이다. 함수레벨 스코프란 함수내에서 해당 변수의 범위가 미치는 것을 말한다. 즉, 함수내에서 var i = 10이 생성 된다면 함수 내에 중괄호가 있던 없던 어디에서든 var i 를 참조할 수 있는 것이다. 자바와 같은 언어에서는 블록레벨 스코프(중괄호 안에서 변수의 범..

javascript 2019.10.22

나의 비밀번호를 지키기 위해서는 특수문자보다 길이가 우선되어야 한다.

암호와 관련 인강을 들으면서 재미있는 사이트를 발견했다. 암호를 해독하는데 걸리는 시간을 cpu성능별로 비교해주는 사이트이다. http://password-checker.online-domain-tools.com/ 이 사이트를 통해 나의 암호를 푸는데 얼마나 오랜시간이 걸리는지 알 수 있다. 이 사이트에서 알 수 있는 교훈 강력한 비밀번호를 만들기 위해서 특수문자, 대소문자를 활용하는 것도 중요하지만, 길이가 조금이라도 긴것이 더 최우선이 되어야 한다는 것이다. Assfeg! 라는 7자리 비밀번호는 암호는 일반 cpu로 3일, gpu로8시간이면 풀린다. 대문자와 특수문자를 사용했지만 7자리에 불과하기 때문이다. 반면, gehfeses!라는 10자리 암호는 대문자를 사용안했음에도 일반 cpu로 2년 gpu..

기타 2019.10.22

[DFS] 프로그래머스 타켓넘버 자바스크립트로 풀기

자바스크립트로 해결한 풀이방법은 구글 검색에서 발견하지 못했습니다. 그래서 직접 자바스크립트 해설을 포스팅합니다. [문제] n개의 음이 아닌 정수가 있습니다. 이 수를 적절히 더하거나 빼서 타겟 넘버를 만들려고 합니다. 예를 들어 [1, 1, 1, 1, 1]로 숫자 3을 만들려면 다음 다섯 방법을 쓸 수 있습니다. -1+1+1+1+1 = 3 +1-1+1+1+1 = 3 +1+1-1+1+1 = 3 +1+1+1-1+1 = 3 +1+1+1+1-1 = 3 사용할 수 있는 숫자가 담긴 배열 numbers, 타겟 넘버 target이 매개변수로 주어질 때 숫자를 적절히 더하고 빼서 타깃 넘버를 만드는 방법의 수를 return 하도록 solution 함수를 작성해주세요. 제한사항 주어지는 숫자의 개수는 2개 이상 20개..

알고리즘 2019.10.21

자바스크립트 참조, 얕은복사, 깊은복사의 차이점

참조 참조형 타입의 객체는 데이터를 직접 보관하고 있는 것이 아니라 데이터가 보관된 메모리 주소를 기억하고 있습니다. 참조형 타입을 다른 변수에 대입하게 되면 복사가 일어나지 않고 참조가 일어나게 됩니다. 참조란 실제 데이터를 복사하는 것이 아니라 데이터가 있는 주솟값을 공유하는 것을 의미합니다. 즉, sports와 sports2 둘 모두 같은 주소를 가리키고 있는 것이며 원본 데이터["soccer", "baseball", "basketball"]를 공유하고 있는 것입니다. 그래서 sports2를 수정하였을 때 sports도 수정이 됩니다. const sports = ["soccer", "baseball", "basketball"]; // 원본 데이터 const sports2 = sports; // 대입..

javascript 2019.10.15

리액트 setState 비동기에 주의하라

setState는 비동기이다. 비동기이기 때문에 일어날 수 있는 실수를 정리했다. 예로들 예제는 클릭할때 마다 1씩 증가하는 스코어 키퍼다. 먼저 이와같이 스테이트가 정의 되어있다. this.state = {score: 0} 1) 잘못된 setState 사용 singleUp() { this.setState({score: this.state.score + 1}) } tripleUp() { // 이 함수가 문제가 된다. this.setState({score: this.state.score + 1}) this.setState({score: this.state.score + 1}) this.setState({score: this.state.score + 1}) } singleUp은 잘 동작하지만 tripleUp..

카테고리 없음 2019.06.27