2022년 2월 23일 수요일

Codility - 코딩테스트 기록용 4일차

 FrogJmp

Count minimal number of jumps from position X to Y.
int값 세개 , X, Y, D값을 입력받아
X의 위치에서 Y까지 D만큼씩 이동했을떄 몇번 이동해야하는지 구하는 문제
 - 내가 푼 코드
public static int solution(int X, int Y, int D) {
int result = ((Y - X) / D) ;
int cha = ((Y - X) % D);
if(cha > 0) {
result++;
}
if(X >= Y) {
result = 0;
}
return result;
}

- 다른사람이 푼 코드 
public int solution(int X, int Y, int D) {
        if(X == Y) return 0;
     return (Y-X)%D == 0? (Y-X)/D : (Y-X)/D + 1;
}
결국 똑같은거지? 

- Swift 버전

func solution(X:Int, Y:Int, D:Int) -> Int{

    var result = (Y-X)/D

    let cha = (Y-X)%D

    if cha > 0{

        result += 1

    }

    

    if X >= Y{

        result = 0

    }

    return result;

}

2022년 2월 3일 목요일

Codility - 코딩테스트 기록용 3일차

 OddOccurrencesInArray

-Find value that occurs in odd number of elements.

N개의 배열에서 짝을 이루지 않는 값을 찾아내기

프로그래머스에서 몇개 풀고왔는데 비슷한 문제가 나왔다

Map을 사용해서 getOrDefault함수를 사용했다

그리고 마지막엔 나머지값이 1인 값을 찾아내기!

public int solution(int[] A) { // write your code in Java SE 8 Map<Integer, Integer> map = new HashMap<>(); for(int i=0; i<A.length; i++){ map.put(A[i], map.getOrDefault(A[i], 0) + 1); } for(int key : map.keySet()){ if(map.get(key) % 2 == 1) {

                return key;

            }

} return -1; }

다른사람이 짠 코드도 비슷하다

하하 이번엔 비슷했다.

SWIFT버전

public func solution(_ A : inout [Int]) -> Int {
    // write your code in Swift 4.2.1 (Linux)
    var map = Dictionary<Int, Int>();

    A.forEach { index in
    map[index] = (map[index, default: 0]) + 1
    }
    
    var result = -1
    map.forEach { (key: Int, value: Int) in
        if(value % 2 == 1){
            result = key
        }
    
    }
    return result
}

2022년 1월 27일 목요일

Codility - 코딩테스트 기록용 2일차

CyclicRotation

 Rotate an array to the right by a given number of steps.

-배열을 주어진 숫자만큼 돌려서 원하는 값을 찾는다

-변경되어야 할 배열순사를 지켜야했음 

-내가 짠 코드

public static int[] solution(int[] A, int K) {

        // write your code in Java SE 8

        int[] result = new int[A.length];

        System.err.println("lenth = "+A.length);

        if(A.length == K){

            return A;

        }     

        

        for (int i = 0; i < A.length ; i++) {

        result[(i+K) % A.length] = A[i];

        System.err.println("i = "+i+" = "+result[i]);

        }

        for (int i = 0; i < result.length; i++) {

System.err.println("a["+i+"] = " +result[i]);

}

        return result;

    }

--다른사람이 짠 코드

class Solution {
    public int[] solution(int[] A, int K) {
        // write your code in Java SE 8
        int len = A.length;
        if(len == 0 || K % len == 0) return A;
        int [] ans = new int [len];

        K = K % len;

        for (int i=0; i< len; i++){
            ans[(i+K) % len] = A[i];
        }
        return ans;
    }
}
역시 개깔끔...나는 멀었나보다
-swift 코드 
public func solution(_ A : inout [Int], _ K : Int) -> [Int] {
    // write your code in Swift 4.2.1 (Linux)
    
    if A.count == K{
        return A
    }
    var result = A
    for i in 0..<A.count{
        let num = (i+K)%A.count
        result[num] = A[i]
    }
    return result
}

2022년 1월 25일 화요일

Codility - 코딩테스트 기록용 1일차

 BinaryGap

Find longest sequence of zeros in binary representation of an integer.

이진법으로 변환 후 1과 1사이의 0의 값을 추출한다.

내가 푼 방법 

public static int solution(int N) {

        // write your code in Java SE 8

String binary = Integer.toBinaryString(N);

List<Integer> aArray = new ArrayList();

int result = 0;

for (int i = 0; i < binary.length(); i++) {

if(binary.charAt(i) == '1') {

aArray.add(i);

}

}

int max = 0;

int val = 0;

for (int i = 0; i < aArray.size() -1; i++) {

if(i == 0) {

max = binary.substring(aArray.get(i), aArray.get(i+1)).length() -1;

}else {

val = binary.substring(aArray.get(i), aArray.get(i+1)).length() -1;

}

if(i > 0) {

max = Integer.max(max, val);

}

}

if(aArray.size() < 2) {

max = 0;

}

return max;

    }


-> 다른 사람이 푼 코드 

class Solution {
    public int solution(int N) {
        // write your code in Java SE 8

        String binaryNum = Integer.toBinaryString(N);
        int temp = 0;
        int maxLen = temp;

        for(int i=1; i< binaryNum.length(); i++){
            if(binaryNum.charAt(i) == '0') temp++;
            else{
                maxLen = Math.max(maxLen, temp);
                temp = 0; 
            }
        }
        return maxLen;
    }
}
개깔끔.. 왜 저생각을 못했지.. 분발하자!

SWIFT 버전

public func solution(_ N: Int) ->Int{

    var result = 0

    let binary = String(N, radix: 2, uppercase: true)

    var tmp = 0;

    for char in binary {

        if char == "0"{

            tmp += 1

        }else{

            result = max(result, tmp)

            tmp = 0

        }

    }

    return result

}