본문 바로가기

전체 글

6/15[문제풀이] 프로그래머스 Lv2 다리를 지나는 트럭 [문제풀이] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 function solution(bridge_length, weight, truck_weights) { let onBridge = new Array(bridge_length - 1).fill(0); onBridge.push(truck_weights.shift()); let count = 1; while (onBridge.reduce((a, b) => a + b) > 0) { onBridge.shift(); if (weight - onBridge.reduce((a, b) => a + b) >= truck_weights[0]) { onBridge.push(t.. 더보기
6/15[TIL] SQL 과 NoSQL 이란? 프로젝트를 하면서 백엔드 포지션에서 작업을 진행하게 되면 여러 가지 고민에 사로잡히게 되는데 SQL과 NoSQL을 정하는 것 또한 큰 고민 중 하나에 속하는 것 같다. MySQL 같은 MySQL 을 사용할 것인가? 아니면 MongoDB 와 같은 NoSQL을 사용할 것 인가... 필자는 아직 MongoDB 와 같은 NoSQL을 사용해 본 적이 없다. 프로젝트를 진행하면서 MySQL과 Postgresql을 사용해본 게 전부라 MongoDB 와 같은 NoSQL을 사용해본 다른 사람들에게 엄청 편하다는 이야기를 많이 들었다. 스키마에 대해 신경 쓰지 않아도 되고 1:N, M:N과 같은 관계를 지정할 필요 없다는 것까지... 듣고 나서 언젠가 사용해보아야 했다고 생각했는데 아직도 그러지 못하고 있다. 꼭 사용해보.. 더보기
6/14[문제풀이] 프로그래머스 Lv2 오픈채팅방 [문제풀이] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 function solution(record) { const users = {}; record.forEach(log => { const [msg, userId, nickname] = log.split(' '); if(msg === 'Enter') { users[userId] = nickname; } else if(msg === 'Change'){ users[userId] = nickname; } }); const settingSentence = { "Enter" : nickname => `${nickname}님이 들어.. 더보기
6/9[TIL] ORM 사용의 장점과 단점은? 프로젝트 중 백엔드 부분을 구축하면서 자연스레 ORM이라는 것을 사용해보고 정말 편리했던 기억이 난다. ORM(Object Relational Mapping)이란? DB와 객체 지향 프로그래밍 언어 간의 호환되지 않는 데이터를 변환, 맵핑(연결)하는 프로그래밍 기법이다. 이는 객체(클래스)와 관계(관계형 데이터베이스)와의 설정을 의미하고 객체 지향 프로그래밍은 클래스를 사용하고 관계형 데이터베이스는 테이블을 사용한다. 여기서 객체 모델과 관계형 모델 간의 불일치가 존재하는데 이를 객체 간의 관계를 바탕으로 SQL을 자동생성하여 불일치를 해결 해주는 것이 ORM이다. Object 와 DB의 데이터 사이에서 맵핑(연결)해주는 매개체 역할이라고 보면 될 것 같다. ORM을 사용함에 있어서 생기는 장 / 단점에.. 더보기
6/9[문제풀이] 프로그래머스 Lv2 문자열 압축 [문제풀이] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 function solution(s) { let answer = [s.length]; let maxiLen = Math.floor(s.length/2); for(let x=1; x 더보기
6/8[문제풀이] 프로그래머스 Lv2 스킬트리 [문제풀이] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 function solution(skill, skill_trees) { let answer = 0; for (let element of skill_trees) { let findValue = true; const filterdSkillTree = element .split("") .filter(e => skill.includes(e)) .join(""); for (let x = 0; x 더보기
6/7[TIL] SQL DB 설계에 있어 중요하게 생각하는 점은 무엇이 있을까? SQL DB 설계에 있어 중요하게 생각하는 점은 무엇이 있을까? 위의 주제의 질문에 대한 답을 필자는 "요구사항에 맞게 꼼꼼하게 검수 한 다음 DB를 설계하는 것"이라는 생각해본다. 한 프로젝트를 진행하게 되면 프로젝트 기획 단계에 정말 많은 시간을 쏟아부어 백엔드 전반의 전체적인 아웃라인을 잡게 되는데 이 부분이 정말 중요한 부분이지만 "이 정도면 됐겠지?"와 같은 안일함으로 기획 단계에 임했다가 프로젝트 도중에 몽땅 뒤엎거나 많은 수정 시간을 필요로 하여 예상 시간이 훨씬 많이 걸렸던 적이 부지기수이다. 이처럼 DB설계를 잘못하게 되면 향후에 유지보수 비용이 엄청나게 들어 갈 수 있고 그렇기에 초기에 설계를 잘해두어야 시간과 비용을 절약할 수 있다. SQL Query도 비슷한 맥락으로 Query 잘못.. 더보기
6/4[문제풀이] 프로그래머스 Lv2 H-Index 문제를 읽고 또 읽어도 당최 무슨 말인지 이해를 하지 못해 한참을 구글링 했던 것 같다. 내가 이해력이 딸려서 이해를 못하는 것인지 설명이 부족한 것인지 한 동안 구글링을 한지 이해를 해서 문제를 풀게 되었다. 솔직히 개념만 이해한다면 그리 어렵지 않은 문제라고 생각이 든다. 하지만 이해하는데 어려웠다는 것... 내 문장 이해력에 의문(?)이 생겼다. H-Index 산출 방법을 한 번 정리 하여야 할 것 같다. 예를 들어 연구자의 발표 논문들과과 인용 횟수들이 존재한다고 생각할 때 Number 논문 명 인용횟수 0 논문 A 53 1 논문 B 26 2 논문 C 20 3 논문 D 13 4 논문 E 10 5 논문 F 4 6 논문 G 2 우선 논문명을 인용횟수인용 횟수 기준으로 내림차순 정렬을 한 후 인용 횟수.. 더보기