전체 글

전체 글

    [백준 2108] 통계학 / 배열 요소의 최빈값 구하기 / Object.entries()

    [백준 2108] 통계학 / 배열 요소의 최빈값 구하기 / Object.entries()

    https://www.acmicpc.net/problem/2108 2108번: 통계학 첫째 줄에 수의 개수 N(1 ≤ N ≤ 500,000)이 주어진다. 단, N은 홀수이다. 그 다음 N개의 줄에는 정수들이 주어진다. 입력되는 정수의 절댓값은 4,000을 넘지 않는다. www.acmicpc.net 셋째 줄 최빈값 구하는것 때문에 애를 많이 먹었습니다. let input = z.toString().trim().split('\n').map(Number) let N = input[0] // 개수 const arr = input.slice(1); // 정수 배열 let a = Math.round(arr.reduce((acc,cur) => acc+cur) / N ) // 1. 산술평균 let b = arr.sor..

    [백준 18870] 좌표 압축 / Map

    [백준 18870] 좌표 압축 / Map

    https://www.acmicpc.net/problem/18870 18870번: 좌표 압축 수직선 위에 N개의 좌표 X1, X2, ..., XN이 있다. 이 좌표에 좌표 압축을 적용하려고 한다. Xi를 좌표 압축한 결과 X'i의 값은 Xi > Xj를 만족하는 서로 다른 좌표의 개수와 같아야 한다. X1, X2, ..., XN에 좌 www.acmicpc.net let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') let arr = input[1].split(' ').map(Number) /// [ 2, 4, -10, 4, -9 ] 입력된 좌표 let set = [...new Set(arr)].sort((a,b)..

    [백준 1181번] 단어정렬 / Set(배열중복제거) / localeCompare() (단어정렬)

    [백준 1181번] 단어정렬 / Set(배열중복제거) / localeCompare() (단어정렬)

    https://www.acmicpc.net/problem/1181 1181번: 단어 정렬 첫째 줄에 단어의 개수 N이 주어진다. (1 ≤ N ≤ 20,000) 둘째 줄부터 N개의 줄에 걸쳐 알파벳 소문자로 이루어진 단어가 한 줄에 하나씩 주어진다. 주어지는 문자열의 길이는 50을 넘지 않는다. www.acmicpc.net let input = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n') const result = [...new Set(input.slice(1))] .sort((a,b) => a.length-b.length || a.localeCompare(b)); console.log(result.join('\n')) lo..

    리액티브 프로그래밍(Reactive Programming)

    리액티브 프로그래밍(Reactive Programming)

    Reactive programming (반응형 프로그래밍) 리액티브 프로그래밍은 데이터 흐름(data flows)과 변화 전파에 중점을 둔 프로그래밍 패러다임(programming paradigm)이다. 이것은 프로그래밍 언어로 정적 또는 동적인 데이터 흐름을 쉽게 표현할 수 있어야하며, 데이터 흐름을 통해 하부 실행 모델이 자동으로 변화를 전파할 수 있는 것을 의미한다. 예를 들어, 데이터 A의 변화에 따라 데이터 B의 값이 변화하는 방식을 리액티브 프로그램이라 칭함. 리액티브 프로그래밍을 사용하는 이유 좋은 프로그램은 메인스레드가 멈추거나 느려지지 않도록 해서, 사용자들에게 부드러운 사용자 경험과 좋은 성능을 제공할 수 있어야 한다. 메인스레드를 자유롭게 유지하려면 무겁고 시간이 오래 걸리는 작업은 ..

    시리즈 A B C란

    시리즈 A B C란

    투자를 A~C로 구분 짓는 것은 미국 실리콘밸리 관행이 그대로 넘어온 것이다. 초기엔 스타트업의 경영권 보호를 위한 우선주 매입을 뜻하는 것이었지만 지금은 초기 투자금의 단계를 뜻하는 피상적 용어로 사용된다. 시리즈 A 단계 시장 검증을 마친 시제품 / 베타버전을 정식으로 오픈하기 위해 준비하는 단계 장기적인 수익창출을 위한 비즈니스 모델 개발 및 스케일 업 필요 투자금은 서비스 출시 및 모니터링 / 마케팅에 이용 VC(벤처캐피탈)들이 본격적으로 참여하는 단계 시리즈 B 단계 시리즈 A를 통해 인정받은 서비스로 사업을 확장, 자금을 확보하는 단계 어느 정도 규모의 고객을 모은 기업이 시장 점유율을 높이기 위해 받는 투자 투자금은 적극적인 마케팅 / 인력확장 / 연구개발 등을 위해 사용 시리즈 C~E ....

    객체지향 5원칙 SOLID

    객체지향 5원칙(SOLID)이란 SOLID란 유명한 Clean Code의 저자 로버트 C. 마틴(Robert C. Martin)이 2000년대 초에 명명한 객체 지향 프로그래밍의 다섯 가지 기본 원칙을 마이클 페더스가 원칙의 앞 글자를 따서 다시 SOLID라는 이름으로 소개한 것. SRP(The Single Responsiblity Principle) : 클래스나 모듈을 변경할 이유가 하나, 단 하나뿐이어야한다는 원칙이다. OCP(The Open Close Principle): 클래스는 확장에는 열려있어야 하며 변경에 닫혀 있어야 한다. LSP(The Liskov Substitution Principle) : 서브타입은 그것의 기반 타입에 대해 대체 가능해야한다. DIP(The Dependency Inv..

    멱등성과 HTTP메소드

    멱등성 (Idempotent) 같은 연산을 여러번 실행해도 그 결과가 달라지지 않는 성질을 의미. ex) const sum = (a,b) => a+b 동일한 인자를 넣고 여러번 실행시켜도 같은 값을 반환하기 때문에 멱등성을 갖는다. HTTP Method 의 멱등성 멱등성의 개념은 HTTP 에서도 동일하게 적용될 수 있다. 동일한 요청을 한번 보내는 것과, 여러번 보내는 것이 서로 동일한 효과를 지니고, 서버의 상태도 동일하게 남을 때 해당 HTTP Method 가 멱등성을 갖는다고 이야기한다. 멱등성을 따질 때에는 서버의 상태만 바라보면 되며, HTTP 응답 Status는 신경쓰지 않아도 된다. 멱등성을 갖는 메소드 GET : 서버에 존재하는 리소스를 단순히 읽어오기만 하는 메소드이기 때문에 당연히 여러..

    허준이 교수의 졸업 축사 전문

    안녕하세요, 07년도 여름에 졸업한 수학자 허준이입니다. 우리가 팔십 년을 건강하게 산다고 가정하면 약 삼만일을 사는 셈인데, 우리 직관이 다루기엔 제법 큰 수입니다. 저는 대략 그 절반을 지나 보냈고, 여러분 대부분은 약 삼 분의 일을 지나 보냈습니다. 혹시 그중 며칠을 기억하고 있는지 세어 본 적 있으신가요? 쉼 없이 들이쉬고 내쉬는 우리가 오랫동안 잡고 있을 날들은 삼만의 아주 일부입니다. 먼 옛날의 나와, 지금 여기의 나와, 먼 훗날의 나라는 세 명의 완벽히 낯선 사람들을 이런 날들이 엉성하게 이어 주고 있습니다. 마무리 짓고 새롭게 시작하는 오늘 졸업식이 그런 날 중 하나일 수 있겠다는 생각이 듭니다. 그런 하루를 여러분과 공유할 수 있어서 무척 기쁩니다. 학위수여식에 참석할 때 감수해야 할 위..

    계층화 아키텍처 (Layered Architecture)  / MVC Pattern / Node.js에서의 적용

    계층화 아키텍처 (Layered Architecture) / MVC Pattern / Node.js에서의 적용

    계층화 아키텍처란 "좋은 코드(협업 가능한 코드)를 작성하기 위해 특정 역할과 관심사로 코드를 모듈화 하는 것" 그렇다면 좋은 코드란 무엇일까 확장성(extensibility) - 시스템의 규모가 커질 경우를 대비할 수 있어야 한다. 재사용성(reusability) - 반복되는 로직을 함수로 분리하고, 설계한 구조를 재사용 할 수 있어야 한다. 유지-보수 가능성(maintability) - 여러 로직이 뒤엉키면 코드는 유지 보수가 어려워진다. 가독성(readability) - 어려운 로직 일수록 더 가독성이 높아야 한다. 어려운 로직을 쉽고 간단하게 구현하는 것이 좋은 코드다. 프로젝트의 구조 또한 한 눈에 그려져야 한다. 테스트 가능성(testability) - 테스트를 하기 쉬운 코드는 모듈화가 잘 ..

    [백준 2587] 대표값2 (Node.js)

    [백준 2587] 대표값2 (Node.js)

    https://www.acmicpc.net/problem/2587 2587번: 대표값2 어떤 수들이 있을 때, 그 수들을 대표하는 값으로 가장 흔하게 쓰이는 것은 평균이다. 평균은 주어진 모든 수의 합을 수의 개수로 나눈 것이다. 예를 들어 10, 40, 30, 60, 30의 평균은 (10 + 40 + 30 + 60 + www.acmicpc.net let i = require('fs').readFileSync('/dev/stdin').toString().trim().split('\n').sort((a,b)=>(a-b)).map(Number) console.log(`${i.reduce((a,c)=>a+c)/5}\n${i[2]}`) 숏코딩은 재미로 보라고 하지만.. 처음으로 1등하여 무척 감격스럽습니다.. ㅜ