배열 만들기 2
https://school.programmers.co.kr/learn/courses/30/lessons/181921
import java.util.*;
class Solution {
public int[] solution(int l, int r) {
List<String> list = new ArrayList<>();
for(int i=l; i<r+1; i++) {
if (i % 5 == 0) {
String num = String.valueOf(i);
String[] numArray = num.split("");
for(int j=0; j<numArray.length; j++) {
if(numArray[j].charAt(0) == '0' || numArray[j].charAt(0) == '5') {
if (j == numArray.length-1) {
list.add(num);
} else continue;
}
else break;
}
}
}
int[] answer;
if (list.isEmpty()) {
answer = new int[]{-1};
} else {
answer = new int[list.size()];
for(int i=0; i<list.size(); i++) {
answer[i] = Integer.parseInt(list.get(i));
}
}
return answer;
}
}
복잡하다,,,,,,,,,,,,,
배열 만들기 3
https://school.programmers.co.kr/learn/courses/30/lessons/181895
import java.util.*;
class Solution {
public int[] solution(int[] arr, int[][] intervals) {
List<Integer> list = new ArrayList<>();
for(int i=intervals[0][0]; i<intervals[0][1]+1; i++) {
list.add(arr[i]);
}
for(int i=intervals[1][0]; i<intervals[1][1]+1; i++) {
list.add(arr[i]);
}
int[] answer = new int[list.size()];
for(int i=0; i<list.size(); i++ ) {
answer[i] = list.get(i);
}
return answer;
}
}
두 수의 합
https://school.programmers.co.kr/learn/courses/30/lessons/181846
import java.math.BigInteger;
class Solution {
public String solution(String a, String b) {
BigInteger aa = new BigInteger(a);
BigInteger bb = new BigInteger(b);
BigInteger result = aa.add(bb);
String answer = result.toString();
return answer;
}
}
처음에는 Integer.parseInt로 바꿔서 계산해주고 값에 ""을 더해서 String으로 만들면 된다는 가벼운 생각으로 접근했는데 int에 안 담기는 큰 값으로 인해 오류,,
이번에는 Double.pareseDouble로 해봤는데 String으로 바꾸니 소수점까지 따라옴 그래서 소수점버릴 수 있게 String.format을 쓰고어쩌고했는데 오류만 계속 남
찾아보니 매우 큰 정수를 표현하는 BigInteger 란게 있었다,,😵
계산 방식도 달랐고 String으로 바꾸는 모양도 사아알짝 달랐다 알아야하는게 정말 많다 또 공부해야지,,
빈 배열에 추가, 삭제하기
https://school.programmers.co.kr/learn/courses/30/lessons/181860
import java.util.*;
class Solution {
public int[] solution(int[] arr, boolean[] flag) {
List<Integer> result = new ArrayList<>();
for(int i=0; i<flag.length; i++){
if(flag[i]) {
for(int j=0; j<arr[i]*2; j++) {
result.add(arr[i]);
}
} else {
for(int j=0; j<arr[i]; j++) {
result.remove(result.size()-1);
}
}
}
int[] answer = new int[result.size()];
for(int i=0; i<result.size(); i++) {
answer[i] = result.get(i);
}
return answer;
}
}
다른사람 풀이
Stack<Integer> stack = new Stack<>();
for (int i = 0; i < flag.length; i++) {
if (flag[i]) {
for (int j = 0; j < arr[i] * 2; j++) stack.push(arr[i]);
} else {
for (int j = 0; j < arr[i]; j++) stack.pop();
}
}
return stack.stream().mapToInt(Integer::intValue).toArray();
원소가 뒤에 추가되고 뒤에서부터 삭제되는거라 나도 풀면서 스택이 떠올랐지만 아직 코드로 써본적은 없어서 안썼는데 이렇게 할 수 있었다!
넣는건 push, 빼는건 pop! stram 쓰는법도 얼른 익혀야겠다
'코딩테스트-알고리즘 > 도전' 카테고리의 다른 글
2024.01.08 - 18문제 (0) | 2024.01.08 |
---|---|
2024.01.07 - 10문제 (1) | 2024.01.07 |
2024.01.05 - 5문제 (1) | 2024.01.05 |
2023.12.31 - 5문제 (0) | 2023.12.31 |
2023.12.30 - 10문제 (0) | 2023.12.30 |