전산학이나 수학에서 요세푸스 문제(Josephus problem) 혹은 요세푸스 순열(Josephus permutation)은 다음과 같이 정의한다.

n과 k가 자연수이고, k < n이라고 가정한다. n명이 동그랗게 모여있을 때 임의의 한 명부터 순서를 세어 나가서 k번째 사람을 모임에서 제외한다. 남은 n-1명에서 다시 다음 사람부터 순서를 세서 k번째 사람을 모임에서 제외한다. 이것을 아무도 남지 않을 때까지 계속해서 반복한다. 이때 모임에서 제외되는 사람의 순서를 (nk) 요세푸스 순열이라고 하며 마지막으로 제외되는 사람을 구하는 문제를 요세푸스 문제라고 한다.

예를 들어 (7,3) 요세푸스 순열은 {3,6,2,7,5,1,4}이며 4번째 위치한 사람이 마지막으로 제외되게 된다.

이 순열은 역사가 요세푸스가 겪은 일화에서 유래하였다.


출처 : https://ko.wikipedia.org/wiki/%EC%9A%94%EC%84%B8%ED%91%B8%EC%8A%A4_%EB%AC%B8%EC%A0%9C




예제 입력 

15
push 1
push 2
front
back
size
empty
pop
pop
pop
size
empty
pop
push 3
empty
front

예제 출력 

1
2
2
0
1
2
-1
0
1
-1
0
3

front는 맨 처음에 offer된 변수를 출력하면 된다.

Java에서는 front같은 메소드가 없는거 같아서 iterator에서를

돌려서 출력해줬다.

곱셈의 결합법칙을 이용해서 예외처리를 해줬다.


주석에 설명을 잘 달아놨다.

처음에 문제를 잘 못 이해해서,

예제 입력 

8
4
3
6
8
7
5
2
1

이면

8 = n 이고

4번 +하고

4 - 3 + 1 만큼 -하고 이런식으로 되는 줄 알앗는데,


1~N까지 push하고 차례대로 pop해주는거였다.

아이디어 :

1. 에라토스테네스의 체를 이용해서 소수를 구한다.

2. 소수를 primeNumber에 하나씩 넣어준다. 마지막값은 0이다.

3. 2... 돌게되면 0이 나오는데 0이면 반복문을 종료한다.

4. 반복문 안에 반복문을 넣어서 값을 더해주고 맞으면 빼기한 값을 저장하고 그걸로 체크를한다.



더 좋은 방법.


어차피 빼기값을 최소로 구하는거니까. n/2부터 시작해서 하나씩 빼면서 맞는답이 나오면 바로 출력하면 더 빠르다.

이 방법을 사용하면 2번 과정이 없어진다.


더 좋은 방법을 사용한다면,

O(Nnlgn)이 될거같다.


2017-11-25

개회사 : 공재웅 운영진(모의침투연구회)

다음회에는 맥주를 마시면서 즐겨보자.

우아한 오픈소스 : 김민태 수석(우아한형제들)

웹 프론트엔드 개발자.

왜 우아한형제들에선 WoowahanJS를 만들었을까?

문제를 정의했다.

현실 :

  1. 웹퍼블리셔(HTML, CSS, Image Cutting)
  2. 프론트앤드 개발자

아키텍쳐는 Micro로 나눠야된다.

나누다보니 API를 제공하게 되고, Framework나 Library를 사용하게 됨

해법 : Js

근본적인 질문

웹 앱의 종류 ?

  1. B2C Web App
    • 잦은 UI 업데이트
    • 복잡하고 디테일한 UI 구성
    • 트랜드에 민감한 UX
    • 재사용륭 1.5%
  2. Backoffice Web App
    • 단순한 CRUD 구조
    • 재사용륭 높은 UI
    • 촉박한 갭라 일정
    • 쉽게 확장되는 스케일

웹 앱은 무엇을 하는거?

Template String + Date => HTML String

Long Term Road Map 을 중요하게 생각해라

오픈소스를 활용한 AI기반 검색 서비스 구축기

기술을 고도화 시키기전에 사용자들의 반응을 살펴라.

Elasticsearch 라는 것을 사용한다.

세그멘터 뿐만 아니라 성능평가를 해야된다.

성능평가를 할 때, 엔진의 성능이 좋은지, 안 좋은지 판단할 기준점이 필요

카테고리를 분류하는 System을 만들어야 된다.

노트북을 검색하면 노트북 받침대가 최상위에 나오기 때문

딥러닝을 하는 엔진을 제작한다.

이미지 인식 검색 기술을 개발했다.

Feature들을 뽑아서 검색

torch, Faster RCNN을 사용

github.com/trending 을 주기적으로 살펴봐라]

Lightning Talk

Hanjp Input Method (한국어 -> 일본어) 오픈소스

Open SUSE?

OPEN STACK(이건 나중에 확인해보자)

추억의 Js

React.js에 반응하라

원래 React = React.js

유명해지니까 React가 됐다.

React의 장점

Virtual DOM

Before After만 비교해서 바뀐 부분만 적용하는 방식

Data Flow

  • React는 단방향 데이터 흐름
  • 주어진 데이터가 같으면 항상 같게
  • 단순한 데이터여서 예측하기 쉬움

JSX

JS 안에 XML

Component

  • 재사용 하는 UI덩어리
  • 라이프사이클
  • 부모에서 자식에 데이터를 보냄

React가 해주는 것

  • 뷰(Redux를 사용해야 상태관리가 가능하다.)

Electron, Typescript, 성공적

일렉트론 주소 : electronjs.org

macOS, Windows, Linux 가능

프레임워크다.

History

  • Node.js와 Webkit을 연결하고자 노력했다.
  • 'Cheng Zhao'가 인텔에서 인턴하면서 프로젝트에 참여
  • 'Cheng Zhao'가 깃헙으로 가서 Atom Editor를 만들기 위해 엔진을 개발
  • Atom Shell -> Electron
  • MS에서 Electron을 사용해 VSCode를 만들면서 본격적으로 인기를 얻음

장점

  • 빠르게 프로젝트가 성장
    • 개발속도가 빠르다.
    • 버그 수정도 빠르다.
    • 크로미움과 노드의 업뎃에 맞춰 빠르게 수정된다.
  • 잘 관리되고 있는 써드 파티 커뮤니티가 함께 성장하고 있다.
  • 다수 유명프로젝트가 사용
    • 자동업데이트, 설치, 배포
    • VS Code도 오픈소스니까 보고해라

단점

  • 앱을 만들지도 않았는데, 100MB가 넘는다.
  • 리소스를 많이 먹는다.
  • 윈도우에서 사용이 상대적으로 불안정하다.
  • 소스보호를 하지 않음(디컴파일)

프로토파이를 Electron으로 한 이유

  • 어마어마한 UI 레퍼런스
  • 미리 만들던 웹 서비스용 코드
  • 크로스 플랫폼

일렉트론 문법

  • ES6
  • async-await도 포함

R로 만드는 API서버 삽질기

의사결정을 위한 데이터 분석 프로젝트의 단계

  1. 데이터 확보
  2. 전처리
  3. 모델링
  4. 시각화
  5. 문서화

머신러닝 프로젝트의 단계

  1. 데이터 확보
  2. 전처리
  3. 모델링
  4. 제품화 Micro Service Architecture 면 제품화하기 쉽다.

작은 API서버?

Micro Service Architecture -> Serverless

협업으로 달라붙고, 빌드 자동화로 편해지자

Github를 사용해 PR Code Review 등등 하고,

빌드는 Travis CI를 사용해봤다.

서버 분류

  • 개발 서버
  • 운영 서버
  • 스테이지 서버 개발 서버 -> 스테이지 서버 -> 로드밸런싱 -> 운영 서버

로드밸런서 http://d2.naver.com/helloworld/605418

오픈 소스 라이선스와 컴플라이언스

라이선스는 배포버전을 올릴 때 라이선스를 변경할 수 있다.

개울가의 올챙이 한마리, 꼬물꼬물 헤엄치다

삽질들

  1. 이미 있는 DB Tool과 싸워야 된다.

데이터 정의로 밝힌 내 삶의 햇볕

에피소드로 설명해준다.

백업

처음에 규모가 작을 땐 로컬 디스크를 사용했다.

커지면 Local Disk -> NAS

너무 커져서 무리가간다.

해결책 : 매일 다른 NAS에

스케쥴링 : 맥시멈 사이즈를 정하고 넘지않게함.(동시에 3개이상 1개의 NAS에 저장하지 않음)

Lossless Replication

마스터/슬레이브 간 데이터가 틀어질 수 있다.

마스터 장애 시 데이터 유실이 발생할 수 있다.

슬레이브 : 비동기로 데이터를 로컬에 복제하며, 굳이 서비스에 포함되지 않아도 되는 것

데이터 복제 : 마스터에서만 서비스하는 상황에서의 피할 수 없는 비동기 데이터 복제

1초마다 transaction log -> RAM -> DISK

후기

오늘 피젯큐브, 블루투스 스피커, 마소 잡지 받음

음 세션들을 자세히 보지 않았지만, 마이크로소프트 디벨로퍼 컨퍼런스여서 C, C++, C# 같은 내용이 많을줄 알았다.

졸린데 라이선스에 대한 설명을 들으니 졸을뻔했다.

결론적으로는 다른 컨퍼런스 같은 경우는 발표하시는 분들이 계속 발표를 한다.(같은 내용을 어딜가도 들음)

근데 이번 MASOCON은 새로운분을 많이 뵌거같다.

1 2 3 4 5 6 7


'IT > 외부활동' 카테고리의 다른 글

JetBrains Night 서울 2017  (0) 2017.11.21
React Seoul 참석 후기  (0) 2017.11.12
FEConf 참석  (0) 2017.10.22

문제를 딱 보고.

아 이건! 미리 구해놓고 하나씩 출력하면 될듯~


에라토스테네스의 체를 복습했다.


c++ 기본기 없이 코딩하려니 에러도 많이나서 질문도 많이했다.


풀이과정은

1. 무식하게 버블정렬 : 시간초과

2. sort를 사용하니까 통과됨


bool cmp(string a, string b){
if(a.length() < b.length()) return true;
else if(a.length() == b.length()) return a.compare(b) < 0;
return false;
}

a.length >= b.length를 고려 안해줘서 조금 많이 틀렸다.

100000000>N의 숫자를 각 자리수를 뽑아서 내림차순으로 정렬하는 문제다.


Character로 받아서 바로 int로 바꿔주고 배열에 담는다.

그리고 그 배열에서 9~0까지 차례대로 출력~



2017-11-21

IntelliJ IDEA 기반 IDE Tips & Tricks

하디 하리리가 인텔리제이 기반 IDE의 팁이랑 쓰는방법을 알려줬다.

중간중간에 joke도 하고 재밋었다.

  1. Tool Box에서 여러가지 세팅이 가능하다.(여러 IDE)
  2. !=가 다르게 표시된다 ===도
  3. 인텔리제이 제품들은 빠른 검색이 된다.
  4. #plugin으로 플러그인도 설치가 된다.
  5. Double Shift로 여러가지가 가능하다.
  6. cmd + E 로 Recently File을 열 수 있다.
  7. control + shift + space bar로 자동완성이 된다.
  8. Analyze가 변수의 사용되는곳을 추적해준다.
  9. Search Template로 검색이 가능하다.(코드라인 제한도 가능)
  10. 사용자가 Warning문법을 만들 수 있다.
  11. Replace도 가능(Warning인거)
  12. variable도 warning가능
  13. Debug가 강력하다.
  14. Test Restful 사용가능

지속적인 작업 흐름(JetBrains 팀툴)

git이나 다른걸 안 써도 빌드 자동 또는 협업이 가능하다.

HUB, TC, VS 등등

Break Time

저녁을 나눠줌.

쿠키와 샌드위치, 과일 그리고 커피

난 커피를 안 마셔서 커피를 안마심

Kotlin 102 - Beyond the basics

하리리의 코틀린 설명이 이어졌는데,

아주 유쾌하고 재밋었다.

근데 난 코틀린을 잘 몰라서 대강 듣기만 했다.

후기

끝나고 하리리랑 사진찍고 싶었는데,

VIP룸에 들어간거 같아서 못 찍었다. ㅠㅠ

1 2 3


'IT > 외부활동' 카테고리의 다른 글

Microsoft Developer Conference 참석  (0) 2017.11.25
React Seoul 참석 후기  (0) 2017.11.12
FEConf 참석  (0) 2017.10.22

+ Recent posts