메뉴 건너뛰기

박영식 홈페이지

[codility] 비도 오고 더럽게 우울하다(4월 19일 글 복구)

[원문보기]

문제 풀이 환경을 제공하는 사이트로 codility를 알게되었다.


개구리가 우는 이유는 청개구리가 비오는 곳에 그들을 묻어서 라고 하던가?


첫번째 문제는 뛸 수 있는 거리(D)가 정해져 있고, 시작거리(X)에서 출발할 때, 몇 번(R) 되어야 종료거리(Y)를 넘을 수 있는가를 묻는다.


영어로 되어 있어서 잘 이해가 가지 않아, 역시 PHP 로 걍 해보다가 답을 보았다.


C언어로 된 답은 그리 간결하지 않다. 이를 PHP로 바꿔서 했더니, 정수가 안 나온다고 해서, 리턴 값을 보니, 2.5다.


C언어에는 타입이 정해져 있어서, 자동 반올림(? 올림일 가능성이 제기됨)되어 정수로 리턴해 줘서 문제가 없었던 듯.


암튼 PHP 로 고치면 아래와 같다.


function solution($X, $Y, $D) {

     $r=0;


        if($Y>$X)

        {   

            $r=($Y-$X)/$D;

            $r=floor($r);

            if(($X+($r*$D)) < $Y)

                $r++;

        }


        return intval(floor($r));

}


먼저 도달해야하는 곳(Y)이 시작점(X) 보다 뒤에 있는지 확인하고, 몇 번 뛰어야 하는지 계산한다.


예제 케이스를 넣어보면 첫번째 R은 2.5이다.

두번째 조건문은 85<80 이므로 거짓이어서 반올림 값만 적용되어 3이 나온다.


두번째 조건문이 왜 필요할까?

그건 첫번째 R에서 동일한 숫자가 나오면 ROAD를 벗어나는게 아닌, 걸치기(?) 때문이다.(글을 정리하면서 이해하게 되었다.)


그런 예라면, 시작 점(X)이 5라고 한 값을 보자.


첫번째 값은 2.666666 이고, 두번째 조건문이 80.0000001 이라 영향을 안 줄 듯.


윽... 이상하다. 두번째 조건문을 주석처리하고 테스트 케이스를 바꿔도 답이 맞는다.


그건 아니고, 테스트 케이스 값이 무엇이다만 리턴하는 듯.


그래서 처음에는 round인 줄 알았는데, 이러면 안 된다. 그래서 floor로 고쳤다.


제출 결과 어떤 테스트 케이스를 넣었는지는 모르겠지만, 통과했다.


나도 그 선을 넘고 싶다. 그런데, 세상은 올림과 반올림은 인정하지 않고, 버림아니면, 마이너스 밖에 없겠지.


https://codility.com/demo/results/demoTZD8DM-38J/


테스트 케이스의 답만 리턴할 것이 아니라, 가부 여부도 알려줘야 한다고 생각한다.


두번째 문제도 풀었다. 처음에는 바보 같이 존재하는 숫자를 순차대로 찾아서 배열에서 소거하려 했는데, 이게 아닌 연속되는 자연수의 합 원리를 이용하면 되는 거였다. 배열 총합을 빠진 숫자까지의 수열 합에서 빼면 누락된 수가 나온다.

https://codility.com/demo/results/demoNF4Q3B-A48/


3번 문제는 특정 부분을 잘랐을 때, 좌측부분의 합과 우측부분의 합의 차를 구하는 문제이다. 어려운 문제는 아닌데, 문제가 이해가 안 가서 이제야 적어놓는다.

[킷캣] 안드로이드는 SD 카드 접근을 불허한다.

[원문보기]

허니콤, ICS 때 부터 외장 SD 카드에 대한 엑세스를 허용하지 않았다고 한다.


그런데, 국내 제조사들은 이를 무시하고, SD 카드를 마음대로 사용할 수 있게 허용해 어플들이 자유롭게 개발되었다.


하지만, 지금은 안드로이드의 정책에 의해 SD 카드 사용 권한을 변경할 경우 판매를 할 수 없도록 했다고 한다.


킷캣이 전환점인데, 삼성도 이를 따르고 있다고 한다.


완전히 사용 못 하는 건 아니고, 외부 메모리카드의 제한된 영역(어플 전용 영역)에 대한 엑세스는 가능하나, 파일 탐색기 처럼 전체를 접근하는 건 허용되지 않는다고 한다.


어플에서는 정책과 제공하는 메서드를 이용해 개발하면 되겠지만, 한쪽에서는 큰 문제가 될 수 있다.


SD카드 관리 전용 앱과 OTG.


OTG는 손쉽게 이용할 수 있는 스마트 폰용 메모리라 할 수 있는데, 외부 메모리로 인식되므로 이를 사용할 수 없다는 것이다.


아직은 많이 퍼지지 않은 것 같은데, OTG를 사용하지 못할 수도 있다. 구글이 구글 클라우드를 이용하도록 하려는 정책이라하는데, 정확한 건 알 수 없다.


왜 그랬을까?


http://open2world.tistory.com/301


http://googledevkr.blogspot.kr/2014/01/no-writing-to-secondary-storage.html


안드로이드 킷캣 부터는 어플리케이션에 특화된 디렉토리의 경우에는 권한 요청 없이 자유롭게 파일을 읽고 쓸 수 있도록 허용하는 동시에 그 외 다른 경로에는 파일을 쓸 수 없도록 제한되었습니다. 앱은 자신에게 할당된 디렉토리를 활용하여 데이터를 저장할 수 있고, 이와 동시에 시스템은 앱이 삭제될 때 앱과 연관있는 파일을 판단하고 이를 모두 삭제할 수 있게 되었습니다.


라고도 하는데, 어떤 파급을 줄지는 지켜봐야 할 것이다.

[상장] 다독자선정

[원문보기]
평소 도서관을 성실이 이용하였다.

[수학] 나의 생년월일은 소수로 되어있다.

[원문보기]
83, 7, 13 은 소수이다.
1983은 물론 소수가 아니다. 830713도 소수는 아니다.

"무한 공간의 왕"이란 책을 읽다가 문득 떠오른 것이다. 평소 수학에 관심이 많았으나, 이제야 이를 발견하다니 늦은 듯 하다.
도널드 콕세터라는 수학자를 알게되어 기쁘다.
그런데, 그 책의 "whitout geometry life is pointless"가 렌터카 광고 카피로 쓰인 이유는 아직도 모르겠다.

네이버 안부게시판에 이재율님이 4색정리와 페르마의 마지막정리를 증명한 논문에 대해 언급했는데, 이해할 수 없다. 시간이 해결해 주려나?

[visual c] precompiled header error 처리

[원문보기]
Visual Studio 2010 beta 2를 설치했는데, C를 위한 프로젝트 생성 메뉴가 없어서 C++로 생성했다.


Error 1 error C1859: 'Debugtest3.pch' unexpected precompiled header error, simply rerunning the compiler might fix this problem c:userskistidocumentsvisual studio 2010projectstest3test3test3.cpp 4 1 test3

 
위와 같은 error가 발생하면, Project의 properties에서 C/C++ Precompiled Headers 옵션을 Not Using Precompiled Headers로 바꿔준다.


역시 C는 잘 지원되긴 하지만, 뭔가 걸리적 거리는 설정이 있다. MS 녀석들... ㅋㅋ
첨부 (5)
1.png
92.1KB / Download 170
2.png
49.9KB / Download 150
3.png
121.7KB / Download 155
4.png
49.9KB / Download 157
5.png
136.8KB / Download 156
위로