[Java] 수열과 구간 쿼리 3

peace w·2023년 10월 4일
0

프로그래머스

목록 보기
20/25

문제

  • 정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
  • query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
  • 위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
  • 제한사항
    • 1 ≤ arr의 길이 ≤ 1,000
    • 0 ≤ arr의 원소 ≤ 1,000,000
    • 1 ≤ queries의 길이 ≤ 1,000
    • 0 ≤ i < j < arr의 길이

입출력 예

문제 풀이

뭔 소린지 못 알아들었다. 일단 2차원 배열에 대한 이해가 부족해서 개념부터 찾아봤다.

2차원 배열은 아래와 같이 생성한다.

int[][] arr1 = new int [3][5];
// 세로 길이(행)가 3, 가로 길이(열)가 5인 int 형 2차원 배열 생성

String[][] arr2 = new String [2][7];
// 세로 길이(행)가 2, 가로 길이(열)가 7인 String 형 2차원 배열 생성

double[][] arr3 = new double [4][6];
// 세로 길이(행)가 4, 가로 길이(열)가 6인 double 형 2차원 배열 생성
  • 세로, 가로 길이를 지정해줘야한다.
  • 1차원 배열과 마찬가지로 인덱스는 0부터 시작한다.

이미지로 나타내면 위와 같다.

생성과 동시에 초기화를 하려면 아래처럼 하면 된다.

int[][] arr3 = new int[][] { 
	{1, 2, 3, 4, 5}, // 1행 초기화
    {6, 7, 8, 9, 10}, // 2행 초기화
    {11, 12, 13, 14, 15}  // 3행 초기화
}; // 3행 5열의 2차원 배열

int[][] arr3 = {
	{1, 2, 3, 4, 5}, // 1행 초기화
    {6, 7, 8, 9, 10}, // 2행 초기화
    {11, 12, 13, 14, 15}  // 3행 초기화
}; // 3행 5열의 2차원 배열
  • for 문을 queries의 길이만큼 반복한다.

  • queries 배열의 총 길이는 알 수 없으나, 내부의 1차원 배열은 [i, j] 꼴이므로 int[i][1] 형태이다.

  • arrqueries[i][0]번 째 원소에, arrqueries[i][1] 번째 원소를 할당한다.

  • arrqueries[i][1]번 째 원소도 arrqueries[i][0] 번째 원소로 바꾸어야 하는데 이미 다른 원소로 바뀌어있다. 따라서 변수로 arr[queries[i][0]]를 설정하여 변하지 않는 값을 잡아두고, 이 값을 할당한다.

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for(int i = 0; i < queries.length; i++) { 
            int one = arr[queries[i][0]];
            arr[queries[i][0]] = arr[queries[i][1]];
            arr[queries[i][1]] = one;
        }
        return arr;
    }
}

arr[queries[i][0]]arr[queries[i][1]]중에 하나를 변수로 잡은 다음, 그 값을 할당하면 된다. 아래처럼 둘다 변수로 잡아도 된다.

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for(int i = 0; i < queries.length; i++) { 
            int one = arr[queries[i][0]];
            int two = arr[queries[i][1]];
            arr[queries[i][0]] = two;
            arr[queries[i][1]] = one;
        }
        return arr;
    }
}
profile
더 성장하자.

0개의 댓글