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

+ Recent posts