반응형
풀이
- 처음에는 그냥 맥시멈 인자값까지 배열을 만들고
- 배열을 확인하면서 visit으로 체크해서 해결해보려고 했는데
- 범위가 +-1000000000이라서... 오우 하면서 다시 생각해보다가
- 무심코 내려버린 스크롤에 의해... 봐버렸다..
- 투 포인트...
- 그래서 다시 깨달을 수 있었다는 것으로 만족하자고 생각함.
- 그리고 주어지는 배열은 정렬이 되어 있는 배열이기에
- 따로 재귀로 객 배열을 정렬할 필요 없었기에 그냥 넘어가고
- 인덱스 값 비교에 따른 값을 result에 하나씩 추가
- 여기서 처음에 고려하지 못한 점은
- 인덱스를 조기에 다채워서 조건식에 맞지 않을 경우를 예상하지 못함
- 이를 위해 조건식을 추가하여 해결.
- 물론 더 효율적인 방법이 있겠지만, 코드의 중복을 우선은 줄이고자 아래와 같이 해결
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
import java.util.stream.Collectors;
public class _11728 {
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_li = new int[N];
int[] b_li = new int[M];
int[] result = new int[N+M];
st = new StringTokenizer(br.readLine());
for (int i=0; i<N; i++) a_li[i] = Integer.parseInt(st.nextToken());
st = new StringTokenizer(br.readLine());
for (int i=0; i<M; i++) b_li[i] = Integer.parseInt(st.nextToken());
int a_idx = 0;
int b_idx = 0;
for (int i=0; i<N+M; i++) {
if (N>a_idx&&M>b_idx) {
if (a_li[a_idx]>=b_li[b_idx]) {
result[i] = b_li[b_idx];
b_idx++;
} else {
result[i] = a_li[a_idx];
a_idx++;
}
}
}
int s_idx = a_idx+b_idx;
if (N==a_idx) {
a_li = b_li;
a_idx = b_idx;
}
for (int i=s_idx; i<N+M; i++) {
result[i] = a_li[a_idx];
a_idx++;
}
System.out.println(Arrays.stream(result).mapToObj(String::valueOf).collect(Collectors.joining(" ")));
}
}
'알고리즘' 카테고리의 다른 글
[백준, 자바, 11728번] 스피카 (1) | 2024.10.14 |
---|---|
[백준, 자바, 15723번] n단 논법 (2) | 2024.10.14 |
[백준, 자바, 10825번] 국영수 (2차원 배열 정렬 문제) (0) | 2024.10.11 |
[백준, 자바, 17204번] 죽음의 게임 (1) | 2024.10.11 |
[백준, 자바, 1388번] 바닥 장식 (1) | 2024.10.11 |