programmers 탑
문제 링크
분류 / 레벨 /언어스택,큐 / LV.2 / Javscript
설명스택,큐 문제는 주로 “정해진”, “순서”등의 키워드가 있다.JS는 array.push(), array.pop()으로 스택을 사용할 수 있다.그리고 array.shift()로 큐를 사용할 수 있다.단 이 문제는 그냥 순리대로 푸는 문제라서그런 것을 사용하지 않고 그냥 써나갔다.
전체 코드1234567891011121314function solution(heights) { const answer = []; heights.forEach((height, i) => { if (i === 0) answer.push(0); else for (let a = i - 1; a > -1; a--) { if (heights[a] > height) { answer.push(a + 1); ...
programmers 타겟 넘버
문제 링크
분류 / 레벨 / 언어DFS,BFS / LV.2 / Javscript
설명개요DFS는 트리가 있을 때 자손 노드를 우선으로하여탐색하여 모든 노드를 탐색/검증한다.
이 때, 노드는 physical한 것만을 의미하지는 않는다.턴제 게임마냥 명백하게 상황이 구분되고, 언젠가 종결되는 것이 자명하면 각 상황을 노드로 봐도 된다.
이 문제에서 요구하는 것은,한 번씩 더하거나 빼서 원하는 상태가 되는지 판단하는 것이다.
“한 번씩” 이벤트가 누적된 것 = 각 노드
풀려면재귀 함수를 사용한다.함수 안에 똑같은 함수를 호출하고, 커트하는 조건을 명시하면 된다.
전체 코드12345678910111213141516function solution(numbers, target) { let count = 0; const end = numbers.length - 1; const compare = (depth, added) => ...
programmers 베스트앨범
문제 링크
분류 / 레벨 / 언어해시 / LV.3 / Javscript
설명자료구조는 2개를 썼다. (songs, genPlays)둘 다 “key = 장르”인 Object이다.
genres에 대해 for문을 돌며 songs, genPlays를 채워준다.
songs는 각 장르에 대해 배열을 가지고 있으며 배열의 0번 index, 1번 index만을 검증하며 채운다.
genPlays는 각 장르에 대해 플레이된 총합을 누적한다.
마지막으로 genPlays의 value가 큰 순으로 장르(key)를 정렬하고,songs에서 장르별로 최대 2개씩 가지고 answer에 합친다.
전체 코드1234567891011121314151617181920function solution(genres, plays) { const songs = {}; const genPlays = {}; genres.forEach(( ...
programmers 위장
문제 링크
분류 / 레벨 / 언어해시 / LV.2 / Javscript
설명해시 set에 모든 경우를 충분히 넣어주고경우의 수를 계산하는 문제이다.
얼굴 a상의 b하의 c(겉옷 0)
만큼의 선택지가 있을 때, (단 종류가 없는건 처음부터 뺀다)각 파트에 아무것도 착용하지 않는 경우까지 포함한다면
얼굴 a+1상의 b+1하의 c+1(겉옷 out)
이고,모든 파트에 아무것도 착용하지 않는 경우는 없으므로다 곱한 후 마지막에 -1
전체 코드12345678910111213141516function solution(clothes) { const temp = new Object(); clothes.map(data => { if (temp[data[1]]) temp[data[1]] += 1; else temp[data[1]] = 1; }); let result = 1; for (let key in temp) & ...
programmers 완주하지 못한 선수
문제 링크
분류 / 레벨 / 언어해시 / LV.1 / Javscript
설명이렇게만 돌려도 충분한가? 반례나 특수한 경우는 없나?라고 고민이 드는 문제가 많은데 이 문제는 그렇지 않았다.
완주하지 못한 사람이 (= 미완주자) 딱 한 명이라서미완주자가 없는 경우를 생각할 필요도 없고, 한 명을 찾고 그 뒤로 또 찾을 필요도 없다.그래서 이런 경우는 while문 안에서 return해버려도 된다.
전체 코드123456789function solution(participant, completion) { participant.sort(); completion.sort(); let i = 0; while (1) { if (participant[i] !== completion[i]) return participant[i]; i++; }}
programmers 가장 큰 수
문제 링크
분류 / 레벨 / 언어정렬 / LV.2 / Javscript
설명정렬 문제이나, Greedy한 시각도 필요하다.자릿수가 다른 수를 받아도 모두 처리할 수 있는 정렬 알고리즘을 구현하려 했으나고려할 경우의 수가 너무 많고, 심지어 수도 1000까지 밖에 안주어져서그냥 매 sort시 최선의 선택을 하도록 만들었다.
답을 제출하고 다른 사람들의 코드를 보았는데 다음과 같은 형변환 트릭이 유행이었다.1 * 문자열 => 숫자"" + 숫자 => 문자열
전체 코드1234567891011function solution(numbers) { if (numbers.every(v => v === 0)) return "0"; return numbers .sort((a, b) => { a = String(a); b = String(b); return p ...
programmers K번째 수
문제 링크
분류 / 레벨 / 언어정렬 / LV.1 / Javscript
설명이 문제는 특히 해야할 일을 input에 순차적으로 명시했다.commands를 여러 command로 분리하고array를 특정 구간 command[0],command[1] 사이로 자른 후,정렬하여,command[2] 위치를 출력한다.각 언어의 내장 함수를 활용하여 풀어야 한다.
전체 코드12345function solution(array, commands) { return commands.map( v => array.slice(v[0] - 1, v[1]).sort((a, b) => a - b)[v[2] - 1] );}
◆개인 프로젝트◆ Typesound
Typesound피아노 웹이다.많은 악기를 지원해서 주로 신디사이저 웹이라고 소개하기도 했다.
운영 플랫폼(서비스 종료)PC, Mobile 반응형 : www.typesound.netGit : Github
사용 기술
사용 기술
호스팅
iwinv(국산 클라우드 업체)
OS
Ubuntu,
Client
ReactJS(Typescript)
기간
운영기간2019.09.04 ~ 2020.01.13
제작기간2019.08 ~ 2019.09
아래 사진들은 iwinv에서 실제 서버를 임대하고 도메인을 구입해 연동한 기록이다.
소개차별점
오른손(하늘색) 연주, 왼손(갈색) 연주를 양손으로 따로 입력할 수 있음
왼손 반주 패턴을 3가지 지원함
왼손 연주시 chord 마다 해당하는 소리를 mapping 해놓음
/src/lib/chordNotes.ts
1234567891011121314151617181920212223242526const chordNotes: { ...
◆졸업 프로젝트◆ Tracker
Tracker개인정보활용 플랫폼이다.유저들의 동선을 취합하여 계약한 기업 측에 시각적으로 제공한다.2019년 2학기에 진행한 졸업프로젝트로, 정식 서비스로 출시하지는 않았다.대신 경진대회에서 발표하여 장려상과 상금 100만원을 받았다!
Git : Github
기간
제작기간2019.09 ~ 2019.11
발표2019.12.06
사용기술
사용 기술
호스팅
개인 서버
OS
Ubuntu
Frontend
React.js, Android
Backend
express.js(docker)
Database
Postgresql
협업 내용
개발자 3인
안드로이드
웹프론트(나)
백엔드
기획과 디자인은 팀원 3명이 회의를 통해 결정
소개개요
빅데이터: IoT, 머신러닝 등 다양한 분야에서 활용
빅데이터 기술이 높은 성과를 내면서 사회적인 관심도 증가
많은 산업에 있어서 개인 정보에 대한 요구 증가
타인의 개인정보를 비밀리에 사고파는 암시장마저 형성
기존의 ...
Database - 정규화
정규화
데이터 저장을 논리적으로, 효율적으로 하기 위해 테이블을 분리하는 것
너무 많이 정규화하면 JOIN 수도 많아져 성능 저하가 생김
제1정규화(1NF)
모든 속성은 단 하나의 값을 가져야 한다.
이름
메뉴
김용훈
apple, banana, berry
이름
메뉴1
메뉴2
메뉴3
김용훈
apple
banana
berry
이런 테이블을 아래와 같이 여러 row로 만들어야 한다. 필요하다면 FK를 사용해 새로운 테이블로 분리해도 된다.
이름
메뉴
김용훈
apple
김용훈
banana
김용훈
berry
제2정규화(2NF)
모든 속성은 모든 기본키에 종속되어야 한다.
부분 함수적 종속이 있으면 제거해야 한다. (완전함수적 종속을 만든다)
기본키가 2개 이상(N개)일 때, N개 미만의 기본키에 종속되는 속성이 있으면 안된다.
주문번호(PK)
userID(PK)
이름
메뉴
1234
1
김용훈
apple
2345
2
mi ...
