코딩테스트 DAY10

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

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

😒점의 위치 구하기

사분면은 한 평면을 x축과 y축을 기준으로 나눈 네 부분입니다. 사분면은 아래와 같이 1부터 4까지 번호를매깁니다.

x 좌표 (x, y)를 차례대로 담은 정수 배열 dot이 매개변수로 주어집니다. 좌표 dot이 사분면 중 어디에 속하는지 1, 2, 3, 4 중 하나를 return 하도록 solution 함수를 완성해주세요.

테스트 케이스

dotresult
[2, 4]1
[-7, 9]2
class Solution {
    public int solution(int[] dot) {
        int answer = 0;
        if(dot[0] > 0) {
            if(dot[1] > 0)
                answer = 1;
            else 
                answer = 4;
        }
        else {
            if(dot[1] >0)
                answer = 2;
            else
                answer = 3;
        }
        return answer;
    }
}

😒2차원으로 만들기

정수 배열 num_list와 정수 n이 매개변수로 주어집니다. num_list를 다음 설명과 같이 2차원 배열로 바꿔 return하도록 solution 함수를 완성해주세요.

num_list가 [1, 2, 3, 4, 5, 6, 7, 8] 로 길이가 8이고 n이 2이므로 num_list를 2 * 4 배열로 다음과 같이 변경합니다. 2차원으로 바꿀 때에는 num_list의 원소들을 앞에서부터 n개씩 나눠 2차원 배열로 변경합니다.

테스트 케이스

num_listnresult
[1, 2, 3, 4, 5, 6, 7, 8]2[[1, 2], [3, 4], [5, 6], [7, 8]]
[100, 95, 2, 4, 5, 6, 18, 33, 948]3[[100, 95, 2], [4, 5, 6], [18, 33, 948]]
import java.util.Arrays;
class Solution {
    public int[][] solution(int[] num_list, int n) {
        int[][] answer = new int[num_list.length/n][n];
        int a = 0;
        for(int i=0;i<num_list.length/n;i++) {
            for(int j=0;j<n;j++) {
                answer[i][j] = num_list[a];
                a++;
            }
        }
        return answer;
    }
}

주어진 배열의 값들을 n개씩 묶어 이차원 배열에 담는 문제이다.
따라서 answer 배열의 크기는 위와 같이 주고, 중첩for문을 통해 배열에 값을 나눠 넣는다

😒공 던지기

머쓱이는 친구들과 동그랗게 서서 공 던지기 게임을 하고 있습니다. 공은 1번부터 던지며 오른쪽으로 한 명을 건너뛰고 그다음 사람에게만 던질 수 있습니다. 친구들의 번호가 들어있는 정수 배열 numbers와 정수 K가 주어질 때, k번째로 공을 던지는 사람의 번호는 무엇인지 return 하도록 solution 함수를 완성해보세요.

테스트 케이스

numberskresult
[1, 2, 3, 4]23
[1, 2, 3, 4, 5, 6]53
[1, 2, 3]32
class Solution {
    public int solution(int[] numbers, int k) {
        int answer = 0;
        int idx = 1;
        for(int i=0;i<k-1;i++) {
            idx+=2;
        }
        if(idx>numbers.length) {
            idx = idx % numbers.length;
        }
        return idx;
    }
}

k-1까지 idx변수를 2씩 증가시킨다. k번째가 누구인지 구하는 것이므로 k-1까지 진행
이렇게 구해진 idx가 답인데, 만약 idx가 참가한 인원인 numbers보다 작아야 하므로, numbers.length로 나눈 나머지를 idx에 넣고
리턴한다.

😒배열 회전시키기

정수가 담긴 배열 numbers와 문자열 direction가 매개변수로 주어집니다. 배열 numbers의 원소를 direction방향으로 한 칸씩 회전시킨 배열을 return하도록 solution 함수를 완성해주세요.

테스트 케이스

ballsshareresult
[1, 2, 3]"right"[3, 1, 2]
[4, 455, 6, 4, -1, 45, 6]"left"[455, 6, 4, -1, 45, 6, 4]
class Solution {
    public int[] solution(int[] numbers, String direction) {
        int[] answer = new int [numbers.length];
        int idx = numbers.length-1;
        int idx2 = 1;
        System.out.println(idx);
        if(direction.equals("right")) {
            for(int i=0;i<numbers.length;i++){
                answer[i] = numbers[idx];
                idx++;
                if(idx>numbers.length-1)
                    idx = 0;
            }   
        }
        else{
            for(int i=0;i<numbers.length-1;i++){
                answer[i] = numbers[idx2];
                idx2++;
            }   
            answer[numbers.length-1] = numbers[0];
        }
        return answer;
    }
}

right인 경우, left인 경우를 if문으로 구분했다.
right : 배열의 마지막 값이 첫번째 값이 되도록 한다.
left : 배열의 두번째 값부터 한칸 씩 left시켜준 후, 첫번째 값을 마지막 값에 넣는다.

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

profile
개애발

0개의 댓글