본문 바로가기
내가 배운 것들/알고리즘

항해99 11/11(목) 알고리즘 - 알아서 푼 것들

by Zabee52 2021. 11. 11.

같은 숫자는 싫어

 

코딩테스트 연습 - 같은 숫자는 싫어

배열 arr가 주어집니다. 배열 arr의 각 원소는 숫자 0부터 9까지로 이루어져 있습니다. 이때, 배열 arr에서 연속적으로 나타나는 숫자는 하나만 남기고 전부 제거하려고 합니다. 단, 제거된 후 남은

programmers.co.kr

class Solution {
    public int[] removeRepeat(int[] arr){
        List<Integer> list = new ArrayList<>();

        for(int i = 0; i < arr.length; i++){
            if(i < arr.length-1 && arr[i] == arr[i+1]){
                continue;
            }
            list.add(arr[i]);
        }
        System.out.println(list);
        int[] result = list.stream().mapToInt(i -> i).toArray();
        return result;
    }
    public int[] solution(int []arr) {
        // arr은 부터 9까지
        // 연속적으로 나타나는건 하나만 남기고 다 제거
        // 기존의 순서는 유지해야함

        int[] answer = removeRepeat(arr);
        return answer;
    }
}

효율성 검증 문제가 달려있어 잘못 짜면 통과를 하지 못 하는 수가 있다. 하지만 웬만하면 통과할 수 있을 정도로 널널하게 범위를 지정해준 것 같다. 그냥 생각나서 풀어본 쉬운 문제였다.

 

 

시저 암호

 

코딩테스트 연습 - 시저 암호

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀

programmers.co.kr

class Solution {
    public String solution(String s, int n) {
        String answer = "";

        char[] chars = s.toCharArray();
        for(int i = 0; i < chars.length; i++){
            if(chars[i] != ' '){
                if( chars[i] >= 'a' && chars[i] <= 'z' ){
                    chars[i] += n;
                    if(chars[i] < 'A' || chars[i] > 'z'){
                        chars[i] -= 26;
                    }
                }else if( chars[i] >= 'A' && chars[i] <= 'Z'){
                    chars[i] += n;
                    if(chars[i] > 'Z'){
                        chars[i] -= 26;
                    }
                }
            }
        }

        answer = String.valueOf(chars);
        return answer;
    }
}

if문을 하나만 써서 코드를 간소화시킬 수 없을까 하는 생각을 하면서 풀어봤는데 안 됐다. 다른 사람들 풀이 보니 없는 것 맞는 것 같았다. 그렇게 되고나니 남은건 오버플로 체크뿐이었는데, 이 부분을 빼면 단순한 문제였다. 같은 코드 여러번 쓰기 싫어서 여러 방법을 강구해봤지만 결국 이렇게 풀게 됐다. 마음에 안 든다.

 

 

제일 작은 수 제거하기

 

코딩테스트 연습 - 제일 작은 수 제거하기

정수를 저장한 배열, arr 에서 가장 작은 수를 제거한 배열을 리턴하는 함수, solution을 완성해주세요. 단, 리턴하려는 배열이 빈 배열인 경우엔 배열에 -1을 채워 리턴하세요. 예를들어 arr이 [4,3,2,1

programmers.co.kr

class Solution {
    public int[] solution(int[] arr) {
        List<Integer> list = new ArrayList<>();
        int min_idx = 0;
        
        if(arr.length > 1){
            for(int i = 0; i < arr.length; i++){
                list.add(arr[i]);
                if(arr[min_idx] > arr[i]){
                    min_idx = i;
                }
            }
            list.remove(min_idx);
        }else{
            list.add(-1);
        }
        return list.stream().mapToInt(i->i).toArray();
    }
}

옆 조원분 도와드리던 중에 얼떨결에 풀게됐다. 나름 재밌게 풀었다.

댓글