코딩테스트 DAY8

차준우·2022년 12월 13일
0
post-thumbnail

프로그래머스 코딩테스트 입문 - DAY8

😒배열 자르기

정수 배열 numbers와 정수 num1, num2가 매개변수로 주어질 때, numbers의 num1번 째 인덱스부터 num2번째 인덱스까지 자른 정수 배열을 return 하도록 solution 함수를 완성해보세요.

테스트 케이스

numbersnum1num2result
[1, 2, 3, 4, 5]13[2, 3, 4]
[1, 3, 5]12[3, 5]
class Solution {
    public int[] solution(int[] numbers, int num1, int num2) {
        int[] answer = new int[num2-num1+1];
        int j = 0;
        boolean checker = false;
        for(int i=0;i<numbers.length;i++) {
            if(i==num1 || checker==true) {
                answer[j] = numbers[i];
                checker = true;
                j++;
                if(i+1 == num2) {
                    answer[j]= numbers[i+1];
                    break;
                }
            }
        }
        return answer;
    }
}

checker변수를 이용해서 true일 경우에만 배열에 값을 넣을 수 있도록 코딩했다. 배열 넣기 시작한 순간부터 true이므로 값을 계속 넣다가, i값과 마지막 인덱스값이 같으면 break로 빠져나온다. 그렇게 완성된 answer를 리턴하는 코드이다.

😒외계행성의 나이

우주여행을 하던 머쓱이는 엔진 고장으로 PROGRAMMERS-962 행성에 불시착하게 됐습니다. 입국심사에서 나이를 말해야 하는데, PROGRAMMERS-962 행성에서는 나이를 알파벳으로 말하고 있습니다. a는 0, b는 1, c는 2, ..., j는 9입니다. 예를 들어 23살은 cd, 51살은 fb로 표현합니다. 나이 age가 매개변수로 주어질 때 PROGRAMMER-962식 나이를 return하도록 solution 함수를 완성해주세요.

테스트 케이스

ageresult
23"cd"
51"fb"
100"baa"
class Solution {
    public String solution(int age) {
        String answer = "";
        String num = String.valueOf(age);
        String[] arr = num.split("");
        for(int i=0;i<arr.length;i++){
            answer+=(char)(Integer.parseInt(arr[i])+97); 
            //97은 아스키코드 a의 문자화
        }
        return answer;
    }
}

split으로 배열 arr에 문자 num을 쪼개어 넣는다.
배열 값을 하나씩 꺼내 97을 더하고 문자열 형태의 answer변수에 붙인다.
여기서 97을 더하는 이유는 97이 아스키 코드에서 a를 뜻하기 때문이다.
Integer.valueOf로 배열값+97을 한 후, char형태로 바꾸어 answer에 붙이면 된다. char형태이므로 문자끼리 붙이는 모습으로 완성된다.

😒진료 순서 정하기

외과의사 머쓱이는 응급실에 온 환자의 응급도를 기준으로 진료 순서를 정하려고 합니다. 정수 배열 emergency가 매개변수로 주어질 때 응급도가 높은 순서대로 진료 순서를 정한 배열을 return하도록 solution 함수를 완성해주세요.

테스트 케이스

emergencyresult
[3, 76, 24][3, 1, 2]
[1, 2, 3, 4, 5, 6, 7][7, 6, 5, 4, 3, 2, 1]
[30, 10, 23, 6, 100][2, 4, 3, 5, 1]
class Solution {
    public int[] solution(int[] emergency) {
        int[] answer = new int[emergency.length];
        int idx = 1;
        int n = emergency.length;
        while(n>0) {
            int max= 0;
            for(int i=0;i<emergency.length;i++) {
                if(max < emergency[i]) {
                    max = emergency[i];
                }
            }
            for(int i=0;i<emergency.length;i++) {
                if(max==emergency[i]) {
                    answer[i] = idx;
                    emergency[i] = 0;
                    idx++;
                }
            }
            n--;
        }
        return answer;
    }
}

배열에서 max값을 구한 후, max값의 인덱스값을 answer배열에 넣었다. 이후 해당 max값은 다음 반복문을 통해 0으로 초기화했다. 이러면 다음 while반복에는 max값이 바뀌게 되고 answer배열에는 결국 진료 순서가 담기게 된다.

😒순서쌍의 개수

순서쌍이란 두 개의 숫자를 순서를 정하여 짝지어 나타낸 쌍으로 (a, b)로 표기합니다. 자연수 n이 매개변수로 주어질 때 두 숫자의 곱이 n인 자연수 순서쌍의 개수를 return하도록 solution 함수를 완성해주세요.

테스트 케이스

nresult
206
1009
class Solution {
    public int solution(int n) {
        int answer = 0;
        for(int i=1;i<=n;i++){
            if(n%i==0) {
                answer++;
            }
        }
        return answer;
    }
}

n의 약수의 개수를 구하는 문제이다.

출처 : https://school.programmers.co.kr/learn/challenges
이미지 출처 : 작가 storyset 출처 Freepik

profile
개애발

0개의 댓글