목차

반응형

 

 

 웹회사임에도 불구하고 회사가 돈에 눈이멀어 웹 + rfid태그로 ios, android로 푸시알람 기능을 제공하는 관공서의 유지보수를 맡았다.

사내에는 android 개발을 해본사람이 나말고 없어서 이곳의 유지보수, 문제사항은 거의 내가맡고있다.(ㄹㅇ 이래서 걍 머해봤냐고 하면 알아도 모른다고 하는게 답인듯)

근데 갑자기 저번주 금요일에 야근하는데 회사로 "님 IOS 태그찍으면 아이패드 장치로 푸시알람이 안옴 이거 다음주 월요일날 아침에 와서 봐주셈" 라는 전화가왔다.

이 관공서의 배경사항은 우리가 해주는 것에 비해 돈을 많이줘서 호출하거나 요청사항이 있으면 꼼짝없이 해줘야한다.

그래서 오늘도 아침부터 부장님하고 관공서로 출근을 했다.

잡설이 길었다.

 

원래 RFID 태그를 찍으면 해당 RFID와 매칭되어있는 IOS 기기장치로 푸시알림을 쏴줘야한다.

하지만 푸시알람이 오지 않아서 문제를 해결해야했다.

 

가장 유력한 문제후보는 인증서다.

IOS 푸시알람은 2년인가마다 인증서를 갈아줘야한다.

 

위의 푸시 알림 인증서를 갱신해야한다는 메일이 와서 인증서를 교체해주었다.

 

인증서를 만드는 과정은 아래 사이트에 자세하게 나와있다.

http://ddirty.tistory.com/50

근데 이문제로 삽질하느라 인증서를 하두많이 만들어봐서 외웠다.

Mac에서 키체인가서 private키 뭐더라 기관에 인증요청하기 확장자도 엄청길었다. 그거 파일 만들어서

아이폰 개발자 사이트가서 갱신해야하는 앱 관리설정 들어가서 아까 만든 인증서 넣으면 cer파일 주고

cer 파일로 한번더 Mac에서 인증서 추출하기해서 비밀번호랑 같이 p12파일을 만들어서 서버에서 사용하면 된다.

크~ 거이그냥 ios 개발자

 

여튼 원래 저렇게하면 돼야하는데 문제는 안된다.

그래서 오늘 약 오전 9시부터 저녁 6시반까지 엄청난 삽질을 했다.

관공서라서 개발적인 이슈가 발생했는데 방법이 없으면 그거 만든곳에다가 전화를 해봐야한다.

애플 개발자 지원센터에다가 전화를 했다. 와 ㄹㅇ 오늘 여따가 전화만 5번한듯

080 860 9797

전화하면 한글 1번 영어 2번

1번을 누른다.

누르면 녹음한다, 뭐라뭐라 인트로가 내가 들어본 인트로중에 제일 길었다.

 

전화받으면 "반감숨니다 ~~ 상투적인 인사, 고갱님의 성함과 apple id를 말해주세요"그러면 apple id랑 성함을 말해준다.근데 apple id말고 뭐 teamid, email 알려드려도 괜찮은것같다.알려드리면 한 1~2분정도가 걸린다.(여기는 전산처리가 매우 느리다 ㄹㅇ 뭐확인하는데 기본이 3~4분)그리고나서 에러사항을 말한다.기술적인 문제면 기술팀으로 넘겨준다고 한다.근데 기술팀으로 전화를 넘겨주는게 아니라 기술팀으로 접수를 도와준답시고 앱 관리자 계정으로 오류발생 상황정보를 요구한다. 요구하는 정보는 아래와 같다.

• 인증서 변경 진행 과정 단계 설명 

• 진행시 사용하였던 웹 브라우저

• macOS 버전

• 문제가 발생한 사용자의 Apple ID (2-3개) 

• 시스템 정보(기기 모델 및 OS 버전 번호) (2-3개)

• 웹 브라우저 버전 번호

• Xcode 버전 번호

• 콘텐츠 이름

• 콘텐츠 Apple ID

• 계약이 유효하고 최신 상태라는 확인

 

 

 

 

뭔가 불친절한것같기도 하지만 물어볼 곳이 없으니까...

성실하게 작성해서 보내준다.

마지막에 계약이 유효하고 최신 상태라는 확인은 걍 무시해도 되는듯하다.

 

여튼 이메일 답장하면 보통 접수하는데 하루~이틀이 걸린다고 한다.

근데 오늘은 어째서인지 몇시간뒤에 연락이 왔다.

 

연락을 받아보니 그렇게 도움되는 정보는 주지 못했다.

기껏해야 푸시알람과 관련하여 인증서가 제대로 갱신되었는지, 갱신날짜확인, 인증서 교체 과정 안내

더욱 구체적인 정보를 원했던 관공서 관계자, 과장님, 나 세명은 부질없는 상담을 받으며 정신이 피폐해져갔다.

관공서 관계자분께서 "아니 고작 이런말 들으려고 오늘 하루종일 이렇게 삽질한거 아님! 이런 말 말고 실질적으로 도움이 되는 말을 해주셈"

이렇게 강하게 말하자 (ㄹㅇ 상담원들 불쌍함) 해당 상담은 코드 레벨 서포트라며 외국인 팀하고 이야기를 해야한다고 했다.

 

여기서 알게된것은 애플 개발자 지원 센터에는 한국인 기술자가 없는것같다. 흠... 애플에서 일부러 전문적이고 기술적인 내용은 안알려주나보다.

 

그래서 상담을 해야한답시고 여따가 내용을 적으라고 하셨다.

상담 내용을 적고 보냈다.

 

 

 

 

아 다음주 월요일에 또 저기로 출근해야함 ㅡㅡ

해결책은 찾아내지못했지만 월요일에 저기 가서 해결책을 다시 찾아보려고 한다.

반응형
반응형

그렇다. 2018 aws summit을 갔따왔다.

원래 평소에도 aws를 쓰고있고 앞으로도 서버가 필요할때마다 aws를 쓸것이기에 오 아마존같은 대기업이 컨퍼런스를 연다고? 꼭가야지! 하고 가게되었다.

 

 

 

 

집에서 코엑스까지 약 2시간, 한번에 가는 버스가 있어서 꿀잠자서 ㄱㅊ다.

 

코엑스 북문이다. 여기 사람이 엄청 많은줄 알았는데 코엑스 남문지점은 더 많더라...

 

 

 

키오스크에서 강연 주제, 간략한 설명들을 볼 수 있었다.

 

 

 

흐음... 여기 있는 사람들 전부다 나같은 개발자라는 것을 생각하니 약간 놀랐다.

왐마 이 컴퓨터 덕후들 아침 9시부터 이렇게 모이다니...

 

 

 

 

 

 

 

 

 

접수대로 가서 qr코드로 참석확인받고 명찰을 받았다. 명찰에도 qr코드가 있었는데, 강연을 들을때마다 해당 qr코드를 보여줘야지 들어갈수있다. qr코드를 찍어서 강의참석 여부를 확인하는 것 같다.

 

 

 

 

이곳은 아침 10시쯤인가 AWS CTO가 기조연설을 하는 곳이다. 규모가 굉장히 크다.

 

 

 

 

기조연설을 하는 내용은 재미없었다.

주로 내용은 

"우리 클라우드의 ㅁㅁ제품은 짱짱이다" => "클라우드 고객 ㅁㅁ회사 이사 ㅁㅁㅁ님의 발표가 있겠다" => "약 n년간의 역사를 이어온 우리회사 ..." => "AWS 클라우드로 갈아탔다." => "짱짱이다" => "우리 클라우드의 ㅁㅁ제품은 짱짱이다" ... 무한반복

이런내용이어서 차장님, 과장님은 그냥 주무셨다. 나라도 들어야지 하면서 꾸역꾸역들었는데 정말 위의 내용이다. ㅇㅇ

 

 

이후 다른 강연도 들어보았다.

주로 AWS의 제품들을 설명하는 내용이었다.

회사사람들과 나는 실습위주의 내용을 원했는데 정말 아마존의 제품설명이 주를 이뤄서 흥미를 가지기가 힘들었다.

어찌보면 대기업 클라스의 엔지니어들은 흥미를 가질수도 있을것같았다.

나는 개발을 오래한다고해서 오늘 가서 들은 내용들이 재미있을것같지는 않다.

이 서버 제품군은 트래픽 처리가 분산이고 뭐 빠르고 좋고 싸고...

어찌보면 개발과는 거리가 먼 컨퍼런스였다고 볼 수 있었다.

그래도 회사분들과 부스를 이곳저곳 돌아다니면서 사은품들을 긁어모았다.

 

 

 

원래 이런걸 모으는 성격은 아니지만 차장님께서 원래좀 얼굴에 철판을 잘까셔서 이리저리 긁어모았더니 꽤나 많다

 

 

 

여기는 몽고DB의 atlas를 주제로 한 부스였다.

부스 돌아다니는 내내 전부다 우리나라 기업들이 클라우드를 주제로 한 부스여서 하나같이 흥미가 없었지만, 평소 버스타면서 아니 왜 내 몽고db 쿼리는 그렇게 더러운걸까? 이 생각을 자주하는 나로서는 정말 반가운 부스였다.

가보니까 어떤 외국인 형씨가 "님 몽고 db 써보실생각있음?" 이러길래

"오 저 쓰고있음요"

이후 몽고db의 db 매니지먼트 콘솔 솔루션 atlas를 소개해주었다.

나는 우리나라 다른 기업들처럼 그냥 스타트업, 중소기업들만의 부스인줄 알고 몽고db atlas도 어디그냥 굴러다니던 회사가 만든건줄 알았는데 시연해주는 사이트의 주소를 보니까 슈퍼 도메인이 mongodb.com였다.

와 맨날 내가 레퍼런스 보러가는 그곳 ㄹㅇ 몽고db가 아니겠는가 그래서 오 님들 이거 ㄹㅇ 몽고디비에서 만든거네요?

하니까 "ㅇㅇ 우리 몽고디비임" 크 지렸다.

이후 너무 영광이어서 사진도 찍어달라했다.

원래 위에 부스에 나뭇잎 몽고db 그림이 붙어있는데 카메라가 안좋아서 묻혔따 ㅜㅜ 악수도 하고 이것저것 받았다.

 

ㅋㅋㅋㅋ 저거 명함보고 님명함 fancy하네요 이러니까 좋아했다.

저 스티커는 내방에 문에 붙여놨다.

왼쪽에 카드는 몽고db 아틀라스 100달러 사용권이다. 약 400시간 쓸수있다는데 가서 이거 써보라고 아저씨가 줬다.

 

 

뭐 솔트웨어 여기서는 장패드도 줬다.

 

 

스벅 5000원

 

 

이건 좀 흥미로워보였는데 우리나라의 fabric같은 업체다.

heatmap, 사용자 앱 사용 리플레이 이런것도 있길래 신기해서 찾아봤더니 패브릭에도 해당 기능을 지원하는 플러그인이 있다.

당장 팀원에게 설치하자고 했다. 꿀기능 알려줘서 ㄳㄳ

 

 

글고 셔츠도 받았는데 집에와서 받아보니 이런 셔츠였다. ㅋㅋㅋㅋ 그냥 보자마자 웃음이 나왔다.

와 저걸 입고다니면 얼마나 찐따같을까 그래도 멋있긴하다.

 

 

여기 와본사람은 알겠지만 거의 모든사람이 들고다니던 사은품 우산이다.

매우 고퀄이라서 만족스럽다.

 

 

 

원래는 내일까지 하는 행사지만 차장님이 내일걍 출근하자고 하셔서 못가게되었다.

전반적으로 좀 아쉽다.

도대체 어떤사람들이 와야지 오늘 들었던 강좌들을 흥미롭게 들을까

내가 많이 부족한건가

흐음... 절레절레

 

그래도 aws 스토리지라는거를 관심있게 들었다.

나중에 사업이 번창하면 특정 미디어는 aws 스토리지에 올려서 관리를 해야겠다는 생각을 하며...

큰수확은 없었던 하루였다.

반응형
반응형

사실 윈도우에서 기본적으로 제공하는 기능인줄알았는데 울트라몬이라는 프로그램에서 제공해주는 기능이었다.

내 컴퓨터에서 작업하다가 다른사람 컴퓨터가서 작업하면 이 기능이 없어서 매우 불편하다.


모니터에 따라서 작업표시줄을 분리해주는 기능인데 개꿀이다.

ultramon



반응형
반응형

이 작업을 하게된 계기는 이렇다.

엑셀로 온 대량의 데이터를 워드프레스 사이트에다가 HTML 게시판 형태로 보여줘야하지만

해당 프로젝트의 워드프레스에서는 자바스크립트가 먹지를 않고, 게시판 모듈을 설치해서 처리하기가 매우 까다롭고 실제 게시물 조회처리까지는 필요없어서 그냥 자사의 아무서버에 간단한 게시판 리스트 페이지를 만들어서 iframe으로 불러와서 처리하기로 하였다.



이런 형태의 게시판을 만드는것이 목적(리스트만 나오도록)




처리하게된 데이터는 위와같다. 약 127개의 데이터로 아이디값, 서점이름, 주소, 번호, 부가정보

5개의 컬럼정보가 있다(부가정보는 나중에 필요없어서 버림)




흠 어떻게하면 가장빨리 처리할수있을까 생각하다가

저 정보들을 json 데이터로 바꾼뒤에 jquery와 js를 이용해서 뿌려주기로 했다.



일단 먼저 json데이터로 변환하기위해 csv 쉼표로 분리 이 형태로 저장을 하자





불러와보니 이런식으로 되어있다. 이거보면 바로 그냥 에디트플러스 교체기능 써먹어버리면 되는각아니겠음?







자 원하는 결과물은 위 사진과같다

[{"id":"1","name":"하이북","adres":"고양시 덕양구 통일로 140 삼송테크노밸리A동 B14호","tel":"02-336-8840","img":"하이북(*-******)-매장외부정면"},{} ...]

어떻게 해야할까





위의 텍스트처럼 하면된다.

.+ => .은 아무텍스트 +는 n번반복 => 아무텍스트나 무한반복

(.+) => 아무텍스트나 무한반복되는 것을 그룹화

(.+), => 쉼표를 만날때까지 아무텍스트나 무한반복 그리고 아무텍스트를 그룹화

요런 원리로 쉼표로 구분되어있는 텍스트들을 그룹화해서 인식한뒤에 \1 \2 이렇게 그룹화한 정보를 그대로 가져다가 json 형태로 가공한다.








그리하여 위와같은 간이 게시판이 생겼다.






<html>
<head>
<link rel="stylesheet" type="text/css" href="board.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script>
var arr = [{
"id": "127",
"name": "북스벨리(장안대점)",
"adres": "화성시 봉담읍 삼천병마로 1182(장안대학교사회과학관1층 구내서점)",
"tel": "031-244-4376",
"img": "북스벨리(장안대점)(*-******)-매장외부정면"
}
];
</script>
<script>
var page = [];
$(function () {
var i = 0, j = 0;
$.each(arr, function () {
if (i == 9) {
page[j] += "<tr>" +
"<td>" + this.id + "</td>" +
"<td>" + this.name + "</td>" +
"<td>" + this.adres + "</td>" +
"<td>" + this.tel + "</td>" +
"</tr>";
i++;
i = 0;
j++;
}
else {
page[j] += "<tr>" +
"<td>" + this.id + "</td>" +
"<td>" + this.name + "</td>" +
"<td>" + this.adres + "</td>" +
"<td>" + this.tel + "</td>" +
"</tr>";
i++;
}
});
select(0);
});

var select = function (index) {
$('#myTable > tbody:last').empty();
$('#myTable > tbody:last').append(page[index]);
}
</script>
</head>
<body>
<table id="myTable">
<caption>게시판 리스트</caption>
<colgroup>
<col style="width: 7%">
<col style="width: 10%">
<col>
<col style="width: 11%">
<col style="width: 10%">
<col style="width: 10%">
</colgroup>
<thead>
<tr>
<th scope="col">번호</th>
<th scope="col">서점명</th>
<th scope="col">주소</th>
<th scope="col">사업장 전화번호</th>
</tr>
</thead>
<tbody class="body">
</tbody>
</table>
<script>
select(0);
</script>
<a href="#" onclick="javascript:select(0)">1</a>
<a href="#" onclick="javascript:select(1)">2</a>
<a href="#" onclick="javascript:select(2)">3</a>
<a href="#" onclick="javascript:select(3)">4</a>
<a href="#" onclick="javascript:select(4)">5</a>
<a href="#" onclick="javascript:select(5)">6</a>
<a href="#" onclick="javascript:select(6)">7</a>
<a href="#" onclick="javascript:select(7)">8</a>
<a href="#" onclick="javascript:select(8)">9</a>
<a href="#" onclick="javascript:select(9)">10</a>
<a href="#" onclick="javascript:select(10)">11</a>
<a href="#" onclick="javascript:select(11)">12</a>
<a href="#" onclick="javascript:select(12)">13</a>
</body>
</html>


게시판의 소스에 대한것은 위와같다 (페이지 네이션까지 넣음)



이후 퍼블팀이 더 에쁘게 꾸며주었다.





반응형

'IT > regex' 카테고리의 다른 글

editplus 검색한 regex 키워드 활용하기  (0) 2018.04.13
네이트온 채팅 데이터화, 시각화 word cloud  (0) 2018.04.12
반응형



Replacing

Regular Expressions supports tagged expressions. This is accomplished using ( and ) to surround the text you want tagged, and then using \1 in the replace string to substitute the first matched text, \2 for the second, etc.

For example:

Text bodySearch stringReplace stringResult
Hi my name is Fredmy name is (.+)my name is not \1Hi my name is not Fred
The quick brown fox jumped over the fat lazy dogbrown (.+) jumped over the (.+)brown \2 jumped over the \1The quick brown fat jumped over the fox lazy dog

에디트플러스로 regex로 편히 수정을 하다보면 키워드를 찾은뒤에 가공이 필요할 때가 있다.

예를들자면

안녕하세요 김정은입니다.

안녕하세요 문재인입니다.

안녕하세요 홍준표입니다.

안녕하세요 닐리리아입니다.


이런상태에서 양식만 조금 바꾸고싶을때가 있을때

안녕 김정은이라고해

안녕 문재인이라고해

...

이렇게 바꾸고 싶을때는 냅두고 싶은 검색키워드를 ()로 감싸서 아래 바꿀 말에서 그룹 순서를 적어서 써먹을 수 있다.



주로 데이터 삽입하는 쿼리문 작성하거나 쿼리문 대량으로 수정할때 써먹을수있음

반응형
반응형

갑자기 회사 네이트온 채팅방을 대상으로 word cloud를 해보고싶어졌다.

word cloud란 

word cloud에 대한 이미지 검색결과

이런식으로 대량의 텍스트에서 가장 자주 쓰이는 텍스트를 추출하여 시각화하는 것을 말한다.

그냥 재미용으로 많이 쓰이기도 하고 발표할때 시선집중용도로도 자주쓰이는것같다.


어쨌든 회사 네이트온 채팅방에서 모든 텍스트를 긁어왔다.

하지만 큰 문제가 있다.


AAA 님의 말(2017/9/21(목) 오전10:00:13) : 

 - 입니다 


XXX 님의 말(2017/9/21(목) 오전10:00:30) : 

 - 넵넵 


XXX 님의 말(2017/9/21(목) 오전10:00:46) : 

 - 감사합니다~ 


이런식으로 ㅁㅁㅁ 님의 말 날짜 필요없지만 계속해서 점유율이 높은 텍스트가 있기때문에 결과가 제대로 나오지 않는다.

저걸 에디트플러스로 간단하게 지워서 처리할거다.

원리는 regex로 특정 텍스트를 찾아내서 지우는 것이지만 regex에대하여 자세하게 설명하지는 않을 것이다.

에디트플러스나 regex로 검색이 가능한 문서도구를 킨다.


이후 Ctrl + H를 눌러서 정규식표현(Regular expression)과 파일 끝에서 검색(Wrap at the end of file)을 체크해준다.

Find 부분에다가는 "[가-힣ㄱ-ㅎㅏ-ㅣ]{3,} 님의 말.*\n - " 따옴표안의 텍스트를 넣어준다.

그리고 검색을 눌러보면

XXX 님의 말(2017/9/21(목) 오전10:00:46) : 

 - 감사합니다~ 

위처럼 입력한 텍스트를 제외한 부분이 선택이 될 것이다.

정삭적으로 인식 되는것을 확인하였으면 Replace with는 비워두고 Repalce All을 눌러 의미있는 텍스트 외에는 전부다 지운다.


결과물을 아래의 wordcloud 사이트에 넣은뒤에 generate 하면 된다.

https://worditout.com/word-cloud/create


regex 참고사이트

http://egloos.zum.com/Cliver/v/2271143

http://blog.edit.kr/entry/%ED%8E%8CJava%EC%97%90%EC%84%9C-%ED%95%9C%EA%B8%80%EC%9D%84-%EC%A0%95%EA%B7%9C%EC%8B%9D%EC%9C%BC%EB%A1%9C-%EC%B0%BE%EA%B8%B0

반응형
반응형

Stackoverflow 2017 설문조사 결과(프로그래밍 관련)

개인적으로 주목할만한 정보들을 긁어모았다.


https://insights.stackoverflow.com/survey/2017


Programming Languages : 가장 많이 쓰이는 언어

5년연속 가장 많이 쓰이는 언어로 자바스크립트가 뽑혔다.

또한 sql도 연이어 2등을 차지하였고 자바도 마찬가지

그리고 5년만에 드디어 파이썬이 드디어 PHP를 제쳤다.


저 많은 C# 개발자는 도대체 어딨는걸까 ㅎ긓그

내주변의 팀프로젝트에도 회사에서도 자바 개발자밖에 없다. 역시 C# 커뮤니티를 활동하거나 스터디를 하나 들어야겠다. 





Frameworks, Libraries, and Other Technologies : 가장 많이 쓰이는 프레임워크, 라이브러리, 기타 기술

Nodejs와 AngualrJS가 작년과 더불어 1, 2등을 나란히 차지


사실 이 게시물을 작성하게된 계기는 웹 기반 서비스를 만들기 위해서 어떤 언어와 어떤 프레임워크가 가장 적합할까 찾아봤다.

일단 말나온것으로는 Nodejs에 Angular, react, vue 또는 Java Tomcat에 jsp 요렇게 두개가 있는데 일단 Nodejs 엔진으로 하기로 했다. 그리고 그중에서도 컨트롤러, 뷰단을 뭘로 처리할지 고민하다가 다른사람들은 뭘쓰나 조사하게 된 것이다. 얘기하다보니 Nodejs에 React로 하기로했다.






Databases : 가장 많이 사용하는 DataBase

위의 조사는 올해 처음 한것이라고한다.


역시 소규모 벤처기업이 늘어나다보니 MySQL의 사용빈도가 늘어난 것이 아닐까 싶다.

난 근데 MongoDB가 좋다. 하지만 복잡한 연산이 필요한 경우 MySQL이 더 좋은것같다(아니면 내가 MongoDB 다루는 실력이 안좋아서 그런걸수도...? 나만 그런가?)







Platforms : 가장 많이 사용된 플랫폼

윈도우와 리눅스가 가장 많이 쓰였다.









Languages Over Time : 5년간의 프로그래밍 언어 사용 빈도 변화 추세

c#은 폭삭 앉다가 멈추고 나머지 기성 언어들도 줄어드는 추세

다만 nodejs js는 엄청 상승하는것으로 보임

설문조사에 웹 개발자가 많아서 그런것같기도 하다.







Most Loved, Dreaded, and Wanted : 가장 사랑받는, 피하고싶은, 배우고싶은 언어

가장 사랑받는 언어(앞으로도 계속 사용하고 싶은 언어)



기피언어(일하면서 마주하고 싶지 않은 언어)


배우고 싶은 언어(올해 한번 배워보고 싶은 언어)






Correlated Technologies



반응형
반응형

효진이는 멀리 뛰기를 연습하고 있습니다. 효진이는 한번에 1칸, 또는 2칸을 뛸 수 있습니다. 칸이 총 4개 있을 때, 효진이는
(1칸, 1칸, 1칸, 1칸)
(1칸, 2칸, 1칸)
(1칸, 1칸, 2칸)
(2칸, 1칸, 1칸)
(2칸, 2칸)
의 5가지 방법으로 맨 끝 칸에 도달할 수 있습니다. 멀리뛰기에 사용될 칸의 수 n이 주어질 때, 효진이가 끝에 도달하는 방법이 몇 가지인지 출력하는 jumpCase 함수를 완성하세요. 예를 들어 4가 입력된다면, 5를 반환해 주면 됩니다.


수학적으로 생각해보았다.



항상 수학적인 깨달음은 그래프화를 하면서 나오기에, 일단 그래프를 그렸다.

위의 식에서 n은 칸의 개수, x는 한칸 움직이는 횟수, y는 두칸 움직이는 횟수다.

2x+y=n이라는 식에서

만약 n이 4이면 x, y는 위 그래프에서 x가 정수인경우의 정의역과 그에 따른 치역을 가진다.

n이 4 => x는 0, 1, 2

y는 4, 2, 0

그리고 각 순서쌍에 대하여 경우의 수를 구하는 식을 만들어내었다.

(n-x)!/{(n-2x)!x!}인데 경우의 수 문제에서 남학생과 여학생 문제를 기억하면 쉽다.

n-x는 총 학생의 수, n-2x는 남학생 수, x는 여학생 수 이렇게 생각하면 식이 나온다.

해당 식을 다른 방법으로 접근하여 점화식 형태로 바꿔서 계산을 해보려고 시도해보았으나 여간 쉽지않아서 위의 형태로 해결하였다.


코딩에서는 알고리즘을 

public static long factorial(long i)
{
if(i>1)
 return i * factorial(i-1);
else if(i==0)
  return 1;
else
  return i;
}
public static long factorial2(long i,long j)
{
if(j<i)
 return i * factorial2(i-1,j);
else
  return 1;
}
 long result=0;
    for(int i=0;i<=num/2;i++)
    {
      result += factorial2(num-i, num-2*i)/factorial(i);
    }
      return result;


위와같이 팩토리얼을 2개의 함수로 나누었다.

그 이유는 사람이라면 169!/167!을 계산할때 당연히 약분하여 169x168이라 순식간에 계산이 되지만 컴퓨터의 팩토리얼 정의를 위의 factorial 함수처럼 하면 169!/167!을 전부다 계산해서 오버플로 에러가 나버린다.

따라서 factorial2라는 함수를 선언하여 2개의 숫자를 입력받아서 약분을 해주는 함수를 넣어서 해결하였다.

반응형

'IT > 알고리즘' 카테고리의 다른 글

문자열 사이에만 쉼표 붙이도록하기  (2) 2019.01.29
3n+1 문제 in C  (0) 2016.12.05
반응형

일하고 있는데 담당자들이 어디선가 pagespeed란걸 주워들고와서 '님 우리홈페이지 느린데 이것좀 한번 적용시켜보삼'

요렇게 왔다.


홈페이지를 최적화 시켜주는 사이트인데




우선 홈페이지를 주소를 넣으면 최적화 관련하여 분석을 해준다.(분석안되면 https로도 해보자)



여기는 지금 개발중인 사이트인데 26 안좋게나왔다.

사실 속도가 그렇게 느리지는 않다고 생각한다.



여기는 티스토리 블로그



최적화 항목을 보면 CSS, JS, 이미지 파일 관련해서 개선될 수 있는 방안을 말해준다.

그리고 아래쪽에 보면 개선된 리소스 파일 다운로드 버튼이 있다.





다운로드 받으면 프론트단의 리소스 파일들이 있다.



MANIFEST 파일을 열어보면 어떤 경로에 있는 어떤 파일을 교체해야하는지 나온다.



js, css는 min버전으로바꿔준다.

이미지는 png와 용량을 대폭 줄여준다.


하지만 pagespeed 기능이 쓰이기 힘든 두가지 이유가 있다.

1. 주소 http://ajh322.tistory.com을 집어넣으면 해당 페이지만 분석하고 최적화 해줌 -> 사이트의 페이지별로 주소따서 분석을 다해야함.

2. 최적화된 파일을 그냥 복붙하면 되는게아니라 파일 경로를 하나하나씩 다 찾아가서 바꿔줘야함. -> 노가다


반응형
반응형

uva id:100

#include <stdio.h>


int algo(int input);

int main()

{

int i, j, max;

while (scanf("%d %d", &i, &j) == 2 && i > 0 && j > 0 && j < 1000000 && i < 1000000)

{

printf("%d %d ", i, j);

if (j < i)

{

int k = j;

j = i;

i = k;

}

for (max = 1; i <= j; i++)

{

if (algo(i) >= max)

max = algo(i);

}

printf("%d\n", max);

}

return 0;

}

int algo(int input)

{

int n = 1;

while (input != 1)

{

if (input % 2 == 0)

{

input /= 2;

}

else

{

input = input * 3 + 1;

}

n++;

}

return n;

}

18455482100The 3n + 1 problemAcceptedANSI C0.3302016-12-05 05:47:50

//앞뒤순서 안바꿔줘서 에러가 났음.

반응형