1. 문제

비어있지 않은 N개의 정수 배열 A가 1부터 N까지 중복되지 않는 각각의 수를 포함하는지 판별하여 모든 수를 포함하면 1 아니면 0를 반환하기



2. 풀이

배열 A가 1부터 N까지 포함하지 않는 경우는 아래 두가지 이다.

 -. 중복된 수가 포함 된 경우

 -. 하나 이상의 수를 포함하지 않은 경우


중복된 수의 경우 HashSet를 사용하여 중복값이 있는지 체크하면 되고, 하나 이상의 수를 포함하지 않은 경우는 배열의 최대값이 배열의 크기와 같은지 체크하면 된다.



3. 결과

Task Score : 100%

Correctness : 100%

Performance : 100%



4. 코드 및 테스트 코드

PermCheck Code

1. 문제

N 개의 정수 배열 A를 0<P<N 조건의 P를 기준으로 (좌측의 합 - 우측의 합)의 절대값의 최소값 구하기



2. 풀이

좌측의 합 - 우측의 합을 순차적으로 구하기 위해 전체의 합에서 우측의 합을 빼 나가는 방법으로 진행하기로 했다.

결국 P가 1부터 시작하여 N-1까지가는 각 경우의 |좌측의 합 - 우측의 합|은 전체 A배열의 합에서 A[0]부터 A[N-2]까지를 각각 2번(좌측 값 + 우측의 더해진 값)씩 빼주는 결과와 같기 때문에 Arrays.stream(A).sum()에서 A[0]*2부터 A[N-2]*2를 빼주며 최소 값을 찾으면 된다.


예)

A [0] = 3, A [1] = 1, A [2] = 2, A [3] = 4, A [4] = 3  의 경우

전체 합인 13에서 A[0]*2 인 6를 빼면 P = 1일 때는 7

그 다음 합인 7에서 A[1]*2 인 2를 빼면 P = 2일 때는 5

그 다음 합인 5에서 A[2]*2 인 4를 빼면 P = 3일 때는 1

그 다음 합인 1에서 A[3]*2 인 8를 빼면 P = 4일 때는 -7 즉, 절대값인 7

하여 이 중 최소 값은 1이 된다.



3. 결과

Task Score : 100%

Correctness : 100%

Performance : 100%



4. 코드 및 테스트 코드

TapeEquilibrium Code

1. 문제

D(거리) 만큼 뛰는 개구리가 시작점(X)부터 도착점(Y) 이상까지 갈 수 있는 최소 점프 수 구하기



2. 풀이

개구리가 가야 할 거리(X-Y)를 개구리 점프 거리로 나눠서 나머지가 없다면 그 몫을, 있다면 몫+1의 값을 반환



3. 결과

Task Score : 100%

Correctness : 100%

Performance : 100%



4. 코드 및 테스트 코드

FrogJmp Code

1. 문제

1부터 N+1범위의 서로 다른 정수로 구성된 배열 A의 누락된 요소 찾기



2. 풀이

배열 A를 오름차순으로 정렬한 후 1부터 헤아려서 비어있는 값이 있으면 그 값을, 없다면 마지막 정수+1의 값을 반환



3. 결과

Task Score : 100%

Correctness : 100%

Performance : 100%



4. 코드 및 테스트 코드

PermMissingElem Code

1. 문제

홀수개의 정수로 구성된 배열 A에 쌍을 이루지 않는 요소 찾기



2. 풀이

배열 A를 오름차순으로 정렬한 후 2개씩 묶어 값이 같은지 확인하고 다르거나 더이상 비교할 값이 없을 경우 홀수번째 값을 반환



3. 결과

Task Score : 100%

Correctness : 100%

Performance : 100%



4. 코드 및 테스트 코드

OddOccurrencesInArray Code

1. 문제

N개의 정수로 구성된 배열 A를 정수 K만큼 우측으로 회전한 배열 값을 구하라.

shift시 배열의 마지막 요소는 첫번째 위치로 이동한다.

예를 들어 배열 A가 {5, 1, 2, 3, 7, 1, 2} 이고, K의 값이 3일 경우 결과 값은 { 7, 1, 2, 5, 1, 2, 3}이다.



2. 풀이

배열 A의 length가 2보다 작을 경우엔 rotation의 의미가 없기 때문에 배열 A를 반환한다.

K의 값이 배열 A의 length보다 클 경우 K/A.length만큼 최초 배열A와 동일한 형태가 되기 때문에 K%A.length만큼만 rotation를 진행한다.

A와 같은 사이즈의 배열 rv을 생성하여 K%A.length위치부터 차례로 배열 A의 값을 대입하며 배열의 마지막 이후 첫번째 요소부터 차례로 대입한다.



3. 결과

해당 문제는 Performance 점수가 없으며 실행 결과 Correctness 100% 로 Task Score는 100 point가 되었다.



4. 코드 및 테스트 코드

CyclicRotation Code

CyclicRotation Test Code

1. 문제

양의 정수 N를 받아 이진수로 나타냈을 경우 1로 둘러싸인 연속된 0의 수를 구하라

예를 들어 10001일 경우 3을, 101001000일 경우 2를, 10000000일 경우 0를 반환하면 된다.

N의 범위는 1부터 2,147,483,647이며 함수의 형태는 아래와 같다.

int solution(int N);



2. 풀이

양의 정수를 받아 몫이 없을때까지 2로 나누며 나머지 값을 체크한다.

나머지 값의 경우 최초 1일 때부터 count를 시작하여 이후 1일 때까지 binary gap를 체크한다.

둘 이상의 binary gap이 존재할 경우 기존 binary gap 값과 비교하여 더 큰 값을 return value에 저장한다.

1이하 양의 정수의 경우 이 로직을 타지 않으므로 최초 return value는 0으로 설정한다.



3. 결과

해당 문제는 Performance 점수가 없으며 실행 결과 Correctness 100% 로 Task Score는 100 point가 되었다.



4. 코드 및 테스트 코드

BinaryGap Code

BinaryGap Test Code

개발 중 런쳐앱이나 닫히지 않는 앱을 설치했을때나 간단하게 shell를 이용해서 앱을 삭제하고 싶을때 아래와 같이 해 주면된다.


이미 개발 중인 상태이니 adb는 connection 상태라고 가정했을때 설치한 앱을 삭제하기 위해서는


# adb uninstall 패키지명 을 입력해 주면 된다.


본인이 개발한 앱이라면 패키지명을 쉽게 알수 있지만 만약 apk를 통해 설치한 앱이라면 android monitor에서 디버깅 로그를 보면 앱의 패키지 명이 나오니 이걸로 확인해 볼 수도있다.


반대로 설치를 위해서는


# adb -d install -r 설치할apk경로


로 설치할 수 있다.



자바로 어플리케이션을 개발하다가 웹을 사용하기 위해 Webview를 사용하게 되었는데 이 때 load하는 웹페이지의 css 속성 때문에 원치 않는 스크롤바가 생길때가 있다.

본인이 관리하는 싸이트라면 css를 수정하여 보다 깔끔하게 해결할 수 있지만 그렇지 않을 경우 어플리케이션쪽에서 제거해 주어야 한다.

이때 아래와 같은 방법으로 스크롤바를 제거 할 수 있다.


WebView wv = new WebView();

wv.getChildrenUnmodifiable().addListener(new ListChangeListener<Node>()

{

        @Override

        public void onChanged(Change<? extends Node> change)

        {

                Set<Node> deadSeaScrools = wv.lookupAll(".scroll-bar");

                for(Node scroll : deadSeaScrools)

                {

                        scroll.setVisible(false);

                }

        }

});

커널 부팅중 모듈을 insmod하다가 invalid module 이슈 발생

no symbol version for module_layout

insmod: can't insert '어쩌구저쩌구.ko': invalid module



1. 문제 원인

원인을 찾아보니 커널 버전과 모듈 버전이 맞지 않아 발생한다고 함


그래서 버전 확인해 보니

모듈 버전

$ modinfo 어쩌고저쩌고.ko      

vermagic:       4.1.20-1.2 SMP mod_unload modversions ARMv7 p2v8 


커널버전

$ uname -r

4.1.20-1.2

$ uname -a

Linux (humax-stb) 4.1.20-1.2 #6 SMP Wed Dec 21 17:49:54 KST 2016 armv7l GNU/Linux

얼핏 보면 같아 보이지만 사실 버전 뒷부분의 정보가 다르다.



2. 문제 해결

이럴 경우 kernel config를 수정하여 해결할 수 있다.

Automatically append version information to the version string 옵션을 꺼서 해결해 주면된다.


커널 config 수정하자!

$ make menuconfig


General setup 메뉴에서 Automatically append version information to the version string 항목 앞에 체크를 풀어 주자.


저장은 아래 Save로 저장 후 Exit로 나가면 된다.


수정 후 다시 빌드 하면 정상 동작하는 것을 확인할 수 있다.

+ Recent posts