반응형
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- QA엔지니어
- 벤쿠버집구하기
- FLEX5
- 레노보노트북
- 리눅스
- 프로그래머스
- binaray_gap
- 외래키설정
- FIDO 환불
- Lesson3
- BC렌트
- 엔테크서비스
- 백준알고리즘
- 1463번
- 데이터의 무결성
- IntelliJ
- codility
- 자바
- database연결
- 벤쿠버 렌트
- 언마운트
- 파이도 환불
- Linux
- Lesson2
- Java
- 부산입국
- 벤쿠버렌트
- 설탕문제
- 캐나다워홀
- FK 설정
Archives
- Today
- Total
대충이라도 하자
Arrays- Chapter2 본문
반응형
Inserting a new element into an Array can take many forms:
- Inserting a new element at the end of the Array.
- Inserting a new element at the beginning of the Array.
- Inserting a new element at any given index inside the Array.
Duplicate Zeros
이렇게 풀었는데 오류가 발생해서 문제를 다시 읽어보지 원래 존재하는 arr을 변경시켜야 하는 문제였다.ㅜㅜ
이렇게 해놓고 원래의 배열에 다시 넣는 방법도 있지만, 문제의 의도는 이를 지양하는 듯하다.
물론, 아래의 방법이 문제 푸는 시간은 훨씬 빠르다.ㅋㅋㅋ
class Solution {
public int[] duplicateZeros(int[] arr) {
int len = arr.length;
int [] result = new int[len];
int index = 0;
for(int i = 0; i<len;i++){
if(arr[i] != 0){
result[index] = arr[i];
index++;
}else if(arr[i] == 0) {
if(index+1>=result.length){
result[index]=0;
break;
}else{
result[index] = 0;
result[index+1] = 0;
index +=2;
len--;
}
}
}
return result;
}
}
2번째 생각한 방법은 배열을 새로 만들지 않고 옆의 것을 옮기는 방향으로 풀었다. (40.09%)
이런 배열 문제를 접할 때마다 항상 조심해야 하는 것이 인덱스+1, 인덱스-1에서 length를 벗어나지 않도록
조건을 꼭 정해줘야 한다.
class Solution {
public void duplicateZeros(int[] arr) {
int len = arr.length;
int index = 0;
for(int i = 0; i<len;i++){
if(arr[i] == 0){
move(i+1, len-1,arr);
if(i+1<len){
arr[i+1] =0;
}
i++;
}
}
}
private void move(int start, int index, int[] arr){
while(index>start) {
arr[index] = arr[index-1];
index--;
}
}
}
Merge Sorted Array
2가지 방법으로 풀어보았다. (100%, 100%)
import java.util.*;
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//방법1. 그냥 다 넣고 Arrays.sort 하기
for(int i=m; i<m+n;i++){
nums1[i] = nums2[i-m];
}
Arrays.sort(nums1);
}
}
import java.util.*;
class Solution {
public void merge(int[] nums1, int m, int[] nums2, int n) {
//방법2. nums1 num2 하나씩 비교하면서 정렬
int p1 = m-1;
int p2 = n-1;
int total = m+n-1;
while (p1>=0 && p2>=0){
if (nums1[p1]<=nums2[p2]){
nums1[total--] = nums2[p2--];
}else {
nums1[total--] = nums1[p1--];
}
}
//nums1의 요소는 다 들어가고 nums2에 아직 남아있을때
while (p2>=0 && total>=0){
nums1[total--]= nums2[p2--];
}
return;
}
}
반응형
'꼬꼬마 개발자 노트 > Coding Problems' 카테고리의 다른 글
Arrays -chapter 4 (0) | 2022.01.12 |
---|---|
Arrays -chapter3 (0) | 2022.01.12 |
Arrays -chapter1 (0) | 2022.01.10 |
프로그래머스-[1차] 추석 트래픽 (0) | 2022.01.06 |
프로그래머스 - 거리두기 확인하기 (0) | 2022.01.05 |
Comments