코테/코드트리

[코드트리/NOVICE MID] 아름다운 수열 2 (JAVA)

imname1am 2023. 11. 10. 13:03
반응형

🔺 문제

 

코드트리 | 코딩테스트 준비를 위한 알고리즘 정석

국가대표가 만든 코딩 공부의 가이드북 코딩 왕초보부터 꿈의 직장 코테 합격까지, 국가대표가 엄선한 커리큘럼으로 준비해보세요.

www.codetree.ai

 

 

🔺 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
import java.util.*;
import java.io.*;
 
public class Main {
    public static void main(String[] args) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer(br.readLine(), " ");
 
        // 입력받기
        int N = Integer.parseInt(st.nextToken());
        int M = Integer.parseInt(st.nextToken());
 
        int[] A = new int[N];
        st = new StringTokenizer(br.readLine(), " ");
        for(int i = 0 ; i < N ; i++) {
            A[i] = Integer.parseInt(st.nextToken());
        }
 
        int[] B = new int[M];
        st = new StringTokenizer(br.readLine(), " ");
        for(int i = 0 ; i < M ; i++) {
            B[i] = Integer.parseInt(st.nextToken());
        }
        Arrays.sort(B); // 정렬하기
 
        int answer = 0;
        for(int i = 0 ; i <= N - M ; i++) { // 탐색할 A 배열 구간에서의 시작점
            int[] tmp = new int[M]; // 구간 내 값들을 담을 임시 배열
            int idx = 0;
            for(int j = i ; j < i + M ; j++) {  // 탐색할 A 배열 구간에서의 끝점
                tmp[idx++= A[j];
            }
 
            // 정렬 후 두 배열의 값이 같다면, 아름다운 수열 수 + 1
            Arrays.sort(tmp);
            boolean isSame = true;
            for(int j = 0 ; j < M ; j++) {
                if(tmp[j] != B[j]) {
                    isSame = false;
                    break;
                }
            }
 
            if(isSame) answer++;
        }
 
        System.out.println(answer);
    }
}
cs

 

 

 

🧩  해결 아이디어

• 완전탐색

- int형 배열 A, B를 입력받고, B배열을 정렬한다.

 

- A 배열에서 탐색할 구간을 설정한다.

- 해당 구간에서의 값을 임시 배열 tmp에 넣는다.

- tmp 배열의 값을 정렬한다.

- 정렬 후, B 배열의 값과 tmp 배열의 값이 완전히 같다면, 정답의 갯수 + 1해준다.

 

 


🔺 다른 풀이들

나처럼 임시 배열 tmp 인덱스 올릴 때, 이렇게 하심..!!

int[] tmp = new int[101];
for (int j = i; j < i + m; j++) {
    tmp[A[j]]++;
}

 

 

그리고 배열 두 개 같은지 비교할 때 Arrays.equals() 메소드 사용하심

if (Arrays.equals(tmp, B)) {
    answer++;
}

💬 느낀 점

빠르게 풉시다 좀ㅠ

 

 

1회독 2회독 3회독 4회독 5회독
V        

(참고)

✔ equals vs Arrays.equals 차이

- equals ; 두 객체 비교

- Arrays.equals ; 두 배열의 내용물 비교

 

 

자바에서 equals 랑 Array.equals

자바에서 배열을 비교할때 아래 두개의 차이점이 뭔가요? array1.equals(array2); Arrays.equals(array1, array2);

qna.programmers.co.kr

 

 

[Java]두 배열을 비교하는 방법

두 배열을 비교하는 방법 Java에서 두 배열을 비교해야 하는 경우 다음 조건을 만족하면 동일하다고 판단합니다. - 두 배열은 모두 동일한 타입입니다. - 두 배열은 동일한 수의 요소를 가지고 있

developer-talk.tistory.com

 

반응형