티스토리 뷰
💻JAVA 코드 바로보기
문제 설명
오름차순으로 정렬되어있는 두 배열 arrA, arrB를 하나의 배열로 합치려 합니다. 단, 합친 후의 배열도 오름차순으로 정렬되어 있어야 합니다.
예를 들어 arrA = [-2, 3, 5, 9], arrB = [0, 1, 5]인 경우 두 배열을 오름차순으로 정렬된 하나의 배열로 합치면 [-2, 0, 1, 3, 5, 5, 9]가 됩니다.
오름차순으로 정렬된 두 배열 arrA와 arrB가 주어졌을 때, 두 배열을 오름차순으로 정렬된 하나의 배열로 합쳐서 return 하도록 solution 메소드를 작성하려 합니다. 빈칸을 채워 전체 코드를 완성해주세요.
매개변수 설명
오름차순으로 정렬된 두 배열 arrA와 arrB가 solution 메소드의 매개변수로 주어집니다.
- arrA의 길이는 1 이상 200,000 이하입니다.
- arrA의 원소는 -1,000,000 이상 1,000,000 이하의 정수입니다.
- arrB의 길이는 1 이상 200,000 이하입니다.
- arrB의 원소는 -1,000,000 이상 1,000,000 이하의 정수입니다.
return 값 설명
두 배열 arrA, arrB를 오름차순으로 정렬된 하나의 배열로 합쳐서 return 해주세요.
예시
arrA | arrB | return |
[-2,3,5,9] | [0,1,5] | [-2,0,1,3,5,5,9] |
완성 코드
package Set01;
import java.util.*;
class Q4 {
public int[] solution(int[] arrA, int[] arrB) {
int arrA_idx = 0, arrB_idx = 0;
int arrA_len = arrA.length;
int arrB_len = arrB.length;
int answer[] = new int[arrA_len + arrB_len];
int answer_idx = 0;
while(arrA_idx < arrA_len && arrB_idx < arrB_len){
if(arrA[arrA_idx] < arrB[arrB_idx])
answer[answer_idx++] = arrA[arrA_idx++];
else
answer[answer_idx++] = arrB[arrB_idx++];
}
while(arrA_idx<arrA_len)
answer[answer_idx++] = arrA[arrA_idx++];
while(arrB_idx<arrB_len)
answer[answer_idx++] = arrB[arrB_idx++];
return answer;
}
// The following is main method to output testcase.
public static void main(String[] args) {
Q4 sol = new Q4();
int[] arrA = {-2, 3, 5, 9};
int[] arrB = {0, 1, 5};
int[] ret = sol.solution(arrA, arrB);
// Press Run button to receive output.
System.out.println("Solution: return value of the method is " + Arrays.toString(ret) + " .");
}
}
코드 분석

arrA의 값과 arrB의 값을 순차적으로 answer에 넣어야하기 때문에,
다음 arrA의 인덱스가 arrA의 길이를 넘어가지 않는 범위에서
arrA[index]의 값과 arrB[index]의 값중 큰 값을 answer에 할당한다.
첫번째 while문의 조건식에
while(answer_idx<(arrB_len+arrA_len))
을 넣는 방법으로도 해봤으나 이미 index가 lenght를 초과한 상태에서 크기를 비교했기 때문에
ArrayIndexOutOfBoundsException가 발생했다.
YBM 제공 코드 (동일)
class Solution {
public int[] solution(int[] arrA, int[] arrB) {
int arrA_idx = 0, arrB_idx = 0;
int arrA_len = arrA.length;
int arrB_len = arrB.length;
int answer[] = new int[arrA_len + arrB_len];
int answer_idx = 0;
while(arrA_idx < arrA_len && arrB_idx < arrB_len){
if(arrA[arrA_idx] < arrB[arrB_idx])
answer[answer_idx++] = arrA[arrA_idx++];
else
answer[answer_idx++] = arrB[arrB_idx++];
}
while(arrA_idx < arrA_len)
answer[answer_idx++] = arrA[arrA_idx++];
while(arrB_idx < arrB_len)
answer[answer_idx++] = arrB[arrB_idx++];
return answer;
}
}
KimSky904 - Overview
Department of New Media Software. KimSky904 has 27 repositories available. Follow their code on GitHub.
github.com
'[코테] > [YBM-sample]' 카테고리의 다른 글
[Cospro Java 1급] 1차 8번_배달서비스 구현하기 (0) | 2022.01.21 |
---|---|
[Cospro Java 1급] 1차 7번_주식 사고팔기 (0) | 2022.01.20 |
[Cospro Java 1급] 1차 6번_계단 올라가기 (0) | 2022.01.19 |
[Cospro Java 1급] 1차 5번_가장 많이 득표한 후보 (0) | 2022.01.18 |
[Cospro Java 1급] 1차 3번_나이트(knight)의 이동가능 횟수 계산 (0) | 2022.01.16 |
- 코딩테스트
- Java
- YBM
- CosPro
- 자바
- C++
- c언어
- cospro기출문제
- 알고리즘
- 배열
- 구름에듀 기출문제
- 배열활용문제
- 프로그래머스
- c언어 기출문제
- 구름 기출문제
- 구름에듀
- C
- lv2
- lv1
- 기출문제
- groomedu
- Cos Pro
- COSPRO 2급
- programmers
- cospro기출
- 연습문제
- 코스프로
- 1급
- YBM기출
- groom
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |