전체 글

전체 글

    [백준 2738] 행렬 덧셈 (Node.js) / 자바스크립트 행렬끼리 덧셈

    [백준 2738] 행렬 덧셈 (Node.js) / 자바스크립트 행렬끼리 덧셈

    https://www.acmicpc.net/problem/2738 2738번: 행렬 덧셈 첫째 줄에 행렬의 크기 N 과 M이 주어진다. 둘째 줄부터 N개의 줄에 행렬 A의 원소 M개가 차례대로 주어진다. 이어서 N개의 줄에 행렬 B의 원소 M개가 차례대로 주어진다. N과 M은 100보다 작거나 같 www.acmicpc.net let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') let [N,M] = input[0].split(' ').map(Number); for(let i=1; i x + b[y]).join(' ')) //첫번째+두번째 행렬의 합 (map 이용) }; 숏코딩 첨으로 순위권에 들었다..

    RESTful API 쉽게 이해하기

    REST API란 REST는 REpresentational State Transfer의 줄임말이다. “State”는 웹 애플리케이션 의 상태를 의미하며, “Transfer”는 이 상태의 전송을 의미한다. 웹서비스에서 전달하려는 자원의 상태 표현 방식이라고 이해하면 쉽다. REST API는 2000년도에 로이 필딩 (Roy Fielding)의 박사학위 논문에서 최초로 소개되었다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로 그 당시 웹(HTTP) 설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로써 REST를 발표했다고 한다. - REST의 규칙을 지키면서 만든 API를 REST API 혹은 RESTful API라고 부른다. REST AP..

    [Javascript] require 와 import 비교

    공통점 두 가지 모두 외부의 파일이나 라이브러리 등 모듈을 불러오는 목적으로 사용한다. require - exports Node.js에서 사용되고 있는 CommonJS 키워드이고 Ruby 의 언어 스타일과 비슷하다. import - export ES6(ES2015)에서 새로 도입된 키워드로서 Java나 Python 언어 방식과 비슷하다. 차이점 1. 문법구조 아래 2줄의 코드는 기본적으로 외부 모듈의 코드를 불러오는 동일한 작업을 수행하고 있지만 문법 구조가 다르다. /* CommonJS */ const name = require('./module.js'); /* ES6 */ import name from './module.js' require()는 CommonJS를 사용하는 node.js문이지만 imp..

    [OS] 메모리 계층 구조 쉽게 이해하기

    [OS] 메모리 계층 구조 쉽게 이해하기

    메모리 계층 구조란 무엇인가 (Memory Hierachy) 메모리를 필요에 따라 여러가지 종류로 나누는 것 => Why?? CPU가 메모리에 더 빨리 접근 가능해짐 컴퓨터 설계에 있어 서로 다른 여러 종류의 메모리 저장 장치를 함께 사용하여 최적의 효율을 낼 수 있게 하는 것 상황에 맞게 여러 저장 장치를 각각 사용하는 설계 => 컴퓨터 성능이 좋아짐 1. 레지스터(Register) CPU가 요청을 처리하는 데 필요한 데이터를 일시적으로 저장하는 기억장치 CPU는 자체적으로 데이터를 저장할 방법이 없으므로 메모리로 직접 데이터를 전송할 수 없음 → 연산을 위해서 반드시 레지스터를 거쳐야 하며, 이를 위해 레지스터는 특정 주소를 가리키거나 값을 읽어올 수 있음 프로세서에 위치한 고속 메모리로, 프로세스가..

    [알고리즘] 시간 복잡도와 Big-O

    [알고리즘] 시간 복잡도와 Big-O

    알고리즘이란 어떤 목적을 달성하거나 결과물을 만들어내기 위해 거쳐야 하는 일련의 과정들을 의미 여러가지 상황에 따른 알고리즘은 모두 다르다. 따라서 시간복잡도가 가장 낮은 알고리즘을 선택하여 사용 효율적인 알고리즘을 구현한다는 것은 바꾸어 말해 입력값이 커짐에 따라 증가하는 시간의 비율을 최소화한 알고리즘을 구성하는 것 시간 복잡도(Time Complexity) 알고리즘의 수행 시간을 분석할 때 시간 복잡도를 사용 최상의 경우 : 오메가 표기법 (Big-Ω Notation) (하한 점근) 평균의 경우 : 세타 표기법 (Big-θ Notation) (평균) 최악의 경우 : 빅오 표기법 (Big-O Notation) (상한 점근) => 시간 복잡도는 일반적으로 빅오 표기법으로 나타냄. 평균인 세타 표기를 하..

    Object Oriented Programming 객체 지향 프로그래밍

    객체 지향 프로그래밍이란 컴퓨터 프로그래밍의 패러다임 중 하나. 컴퓨터 프로그램을 명령어의 목록으로 보는 시각에서 벗어나 여러 개의 독립된 단위, 즉 "객체"들의 모임으로 파악하고자 하는 것이다. 각각의 객체는 메세지를 주고받고, 데이터를 처리할 수 있다. 즉, 프로그래밍에서 필요한 데이터를 추상화 시켜 상태와 행위를 가진 객체로 만들고, 객체들간의 상호작용을 통해 로직을 구성하는 프로그래밍 방법이다. 처음 개발을 시작하는 사람들에겐 난해한 개념이지만. 명령어(코드)들을 하나의 부품처럼 구분한다고 생각하면 쉽다. 각각의 부품들은 서로 연결되어 있으며 서로의 기능들을 주고받고 결국 그것들이 모여 하나의 프로그래밍이 완성된다. 객체 지향 프로그래밍의 장단점 장점 클래스 단위로 모듈화시켜서 개발하기 때문에 업..

    [백준 2941] 크로아티아 알파벳 (Node.js)

    [백준 2941] 크로아티아 알파벳 (Node.js)

    2941번: 크로아티아 알파벳 예전에는 운영체제에서 크로아티아 알파벳을 입력할 수가 없었다. 따라서, 다음과 같이 크로아티아 알파벳을 변경해서 입력했다. 크로아티아 알파벳 변경 č c= ć c- dž dz= đ d- lj lj nj nj š s= ž z= www.acmicpc.net 문제 해결만을 우선적으로 생각하다보니 코드가 그야말로 단순무식해졌다. 숏코딩에 고수들의 접근 방식을 보며,, 감탄했다. 다들 이렇게 쉬운 방법으로 푸는구나. 고수들도.. 처음부터 잘 하지는 않았을 거라는 생각을 가지며.. 오늘도 배운다는 생각으로.. 아래는 내가 처음으로 작성했던 코드 const input = require('fs').readFileSync('/dev/stdin').toString().trim().split(..

    [SQL] WHERE 1=1

    프리온보딩 백엔드 과제중 팀원이 작성한 코드에서 이해가지 않는 코드를 발견했었다.. 지금은 이 코드가 무엇인지 알지만... 또 사용할 일을 대비하여,, 기록한다.. const getMeasurementData = async (date1, date2, weight1, weight2) => { const getMeasurementData = await myDataSource.query( ` SELECT user_id as id, weight, date_format(created_at, "%Y-%m-%d %h:%m:%s") as date, JSON_ARRAYAGG(JSON_OBJECT("value", measurement_data.data, "name", data_types.name)) as typeData ..

    [JS] 중복되지 않는 알파벳으로 이루어진 가장 긴 문자열 찾기

    # 문제 String 형인 str 인자에서 중복되지 않은 알파벳으로 이루어진 제일 긴 단어의 길이를 반환해주세요. str: 텍스트 return: 중복되지 않은 알파벳 길이 (숫자 반환) 예를 들어, str = "abcabcabc" return 은 3 => 'abc' 가 제일 길기 때문 str = "aaaaa" return 은 1 => 'a' 가 제일 길기 때문 str = "sttrg" return 은 3 => 'trg' 가 제일 길기 때문 reduce,, for,, forEach,, 재귀함수 등 여러가지 알고있는 방법 총 동원하여 며칠 씨름하다 해결完,,, 충분히 해결할 수 있는 문제였는데 막무가내 식으로 접근하니 코드가 꼬이고 생각도 꼬이는 구나,, 초기에 어떻게 문제를 해결할지 우선적으로 생각해보고 ..

    파싱(Parsing)이란 무엇인가

    파싱(parsing: 구문 분석)은 하나의 프로그램을 런타임 환경(ex. 브라우저 내 자바스크립트 v8엔진 등)이 실제로 실행할 수 있는 내부 포맷으로 분석하고 변환하는 것을 의미한다. 즉, 파싱은 문서의 내용을 토큰(token)으로 분석하고, 문법적 의미와 구조를 반영한 파스 트리(parse tree)를 생성하는 과정. 브라우저는 HTML을 DOM TREE로 파싱한다. HTML parsing에는 토큰화와 tree 구조가 포함된다. HTML token에는 시작 태그와 마침 태그가 포함되며, 속성 이름과 값도 포함된다. 형식을 잘 갖춘 문서라면 파싱은 직관적이고 빠르게 진행될 것이다. 파서(parser)는 토큰화된 입력값을 문서에 parsing하며, 다큐먼트 tree를 구성한다. HTML parser가 이..