8주차 풀이

인소리·2022년 5월 22일
0

Coding Test

목록 보기
6/13

1. 음양 더하기

문제 설명

어떤 정수들이 있습니다. 이 정수들의 절댓값을 차례대로 담은 정수 배열 absolutes와 이 정수들의 부호를 차례대로 담은 불리언 배열 signs가 매개변수로 주어집니다. 실제 정수들의 합을 구하여 return 하도록 solution 함수를 완성해주세요.

제한 조건

🔹 absolutes의 길이는 1 이상 1,000 이하입니다.
🔹 absolutes의 모든 수는 각각 1 이상 1,000 이하입니다.
🔹 signs의 길이는 absolutes의 길이와 같습니다.
🔹 signs[i] 가 참이면 absolutes[i] 의 실제 정수가 양수임을, 그렇지 않으면 음수임을 의미합니다.

기본 제공 코드

class Solution {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 123456789;
        return answer;
    }
}

내 풀이

public class Solution26 {
    public int solution(int[] absolutes, boolean[] signs) {
        int answer = 0;
        for(int i=0; i<absolutes.length; i++) {
            if(signs[i]==true) answer+=absolutes[i];
            else answer-=absolutes[i];
        }
        return answer;
    }
}

풀이 설명

i를 0부터 absolutes의 길이만큼 for문을 실행시켜준다. signs[i]가 true면 양수이므로 0으로 초기화 한 answer에 absolutes[i]를 더해준다. true가 아니면 false이기 때문에 즉, 음수이기 때문에 absolutes[i]를 빼준다.


2. 나누어 떨어지는 숫자 배열

문제 설명

array의 각 element 중 divisor로 나누어 떨어지는 값을 오름차순으로 정렬한 배열을 반환하는 함수, solution을 작성해주세요.
divisor로 나누어 떨어지는 element가 하나도 없다면 배열에 -1을 담아 반환하세요.

제한 조건

🔹 arr은 자연수를 담은 배열입니다.
🔹 정수 i, j에 대해 i ≠ j 이면 arr[i] ≠ arr[j] 입니다.
🔹 divisor는 자연수입니다.
🔹 array는 길이 1 이상인 배열입니다.

기본 제공 코드

class Solution {
    public int[] solution(int[] arr, int divisor) {
        int[] answer = {};
        return answer;
    }
}

내 풀이

import java.util.Arrays;

public class Solution27 {
    public int[] solution(int[] arr, int divisor) {
        int count = 0;
        for(int i=0; i<arr.length; i++) {
            if(arr[i]%divisor==0) count++;
        }
        if(count==0) {
            int[] answer = {-1};
            return answer;
        }
        int[] answer = new int[count];
        int cnt = 0;
        for(int i=0; i<arr.length; i++) {
            if(arr[i]%divisor==0) {
                answer[cnt] = arr[i];
                cnt++;
            }
            else continue;
        }
        Arrays.sort(answer);
        return answer;
    }
}

풀이 설명

arr 배열 안의 값들을 divisor로 나눴을 때 나누어 떨어질 때마다 0으로 초기화한 count를 증가시켜준다. 만약 count가 0이면 나누어 떨어지는 수가 한 개도 없는 것이므로 answer에 -1을 넣어준 뒤 리턴한다. 0보다 크다면 answer 배열의 크기를 count만큼으로 잡아주고 answer 배열에 알맞게 넣어주기 위해 0으로 초기화한 cnt를 선언해준다.
divisor로 나누어 떨어지는 값은 answer 방에 넣어주고 아닌 값은 continue를 써준다. 마지막으로 Arrays.sort()를 이용하여 오름차순으로 나열하고 리턴한다.


3. 같은 숫자는 싫어

문제 설명

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

arr = [1, 1, 3, 3, 0, 1, 1] 이면 [1, 3, 0, 1] 을 return 합니다.
arr = [4, 4, 4, 3, 3] 이면 [4, 3] 을 return 합니다.

배열 arr에서 연속적으로 나타나는 숫자는 제거하고 남은 수들을 return 하는 solution 함수를 완성해 주세요.

제한 조건

🔹 배열 arr의 크기 : 1,000,000 이하의 자연수
🔹 배열 arr의 원소의 크기 : 0보다 크거나 같고 9보다 작거나 같은 정수

기본 제공 코드

import java.util.*;

public class Solution {
    public int[] solution(int []arr) {
        int[] answer = {};
        
        // [실행] 버튼을 누르면 출력 값을 볼 수 있습니다.
        System.out.println("Hello Java");

        return answer;
    }
}

내 풀이

import java.util.*;

public class Solution28 {
    public int[] solution(int []arr) {

        ArrayList<Integer> arrlist = new ArrayList<Integer>();

        int su = -1;
        for(int i=0; i<arr.length; i++) {
            if(arr[i]!=su) {
                arrlist.add(arr[i]);
                su = arr[i];
            }
        }

        int[] answer = new int[arrlist.size()];
        for(int i=0; i<answer.length; i++) {
            answer[i] = arrlist.get(i);
        }
        return answer;
    }
}

풀이 설명

arr 배열 안의 값들이 영향 받지 않을 수로 su를 초기화하여 첫 번째는 arr[i]와 su를 비교해주고 su에 arr[i]를 넣어줘서 나머지를 비교한다. 값이 똑같지 않으면 add()를 이용하여 arrlist에 넣어준다. 그러면 반복되는 값들은 없어지기 때문에 정답을 넣을 answer 배열의 크기를 정할 수 있다.
answer 배열의 길이만큼 for문을 돌려줌으로서 answer[i]에 get()을 이용하여 넣어준다.


4. 가운데 글자 가져오기

문제 설명

단어 s의 가운데 글자를 반환하는 함수, solution을 만들어 보세요. 단어의 길이가 짝수라면 가운데 두글자를 반환하면 됩니다.

제한 조건

🔹 s는 길이가 1 이상, 100이하인 스트링입니다.

기본 제공 코드

class Solution {
    public String solution(String s) {
        String answer = "";
        return answer;
    }
}

내 풀이

public class Solution29 {
    public String solution(String s) {
        String answer = "";
        if(s.length()%2==1) {
            answer = s.substring(s.length()/2,s.length()/2+1);
        }
        else {
            answer = s.substring((s.length()/2)-1, s.length()/2+1);
        }
        return answer;
    }
}

풀이 설명

문자열의 특정 부분을 뽑을 수 있는 substring()을 이용하여 s가 홀수일 경우에는 s 문자열의 가운데 한 글자를, s가 짝수일 경우에는 가운데 두 글자를 뽑을 수 있도록 인덱스 값을 조정해주었다.


5. 시저 암호

문제 설명

어떤 문장의 각 알파벳을 일정한 거리만큼 밀어서 다른 알파벳으로 바꾸는 암호화 방식을 시저 암호라고 합니다. 예를 들어 "AB"는 1만큼 밀면 "BC"가 되고, 3만큼 밀면 "DE"가 됩니다. "z"는 1만큼 밀면 "a"가 됩니다. 문자열 s와 거리 n을 입력받아 s를 n만큼 민 암호문을 만드는 함수, solution을 완성해 보세요.

제한 조건

🔹 공백은 아무리 밀어도 공백입니다.
🔹 s는 알파벳 소문자, 대문자, 공백으로만 이루어져 있습니다.
🔹 s의 길이는 8000이하입니다.
🔹 n은 1 이상, 25이하인 자연수입니다.

기본 제공 코드

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

내 풀이

public class Solution30 {
    public String solution(String s, int n) {
        String answer = "";
        char ch;
        for(int i=0; i<s.length(); i++) {
            ch = s.charAt(i);
            if(ch==' ') answer+=' ';
            else if(ch>='a' && ch<='z') {
                if(ch+n>'z') answer+=(char)(ch+n-26);
                else answer+=(char)(ch+n);
            }
            else if(ch>='A' && ch<='Z') {
                if(ch+n>'Z') answer+=(char)(ch+n-26);
                else answer+=(char)(ch+n);
            }
        }
        return answer;
    }
}

풀이 설명

charAt()을 사용하여 한 글자씩 char형으로 변환시켜준다. ch가 공백이면 그대로 answer에 넣어주고 소문자일 경우, 대문자일 경우 각각 n만큼 밀었을 때 a, A보다 작거나 z, Z보다 크면 ch에 n을 더하고 다시 돌아오기 위해 26을 빼준다.

profile
코딩이라는 감옥에 갇혀 사는 삶

0개의 댓글

관련 채용 정보