배열 만들기 4
https://school.programmers.co.kr/learn/courses/30/lessons/181918
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
Stack<Integer> stack = new Stack<>();
int i = 0;
while(i<arr.length) {
if(stack.isEmpty()) {
stack.push(arr[i]);
i++;
} else {
if(stack.peek() < arr[i]) {
stack.push(arr[i]);
i++;
} else {
stack.pop();
}
}
}
int[] stk = new int[stack.size()];
for(int j=stk.length-1; j>=0; j--) {
stk[j] = stack.pop();
}
return stk;
}
}
배열 만들기 5
https://school.programmers.co.kr/learn/courses/30/lessons/181912
import java.util.*;
class Solution {
public int[] solution(String[] intStrs, int k, int s, int l) {
List<Integer> list = new ArrayList<>();
for(String str : intStrs) {
int n = Integer.parseInt(str.substring(s, s+l));
if (n > k) list.add(n);
}
int[] answer = new int[list.size()];
int n = 0;
for(int i : list) {
answer[n] = i;
n++;
}
return answer;
}
}
배열 만들기 6
https://school.programmers.co.kr/learn/courses/30/lessons/181859
import java.util.*;
class Solution {
public int[] solution(int[] arr) {
Stack<Integer> list = new Stack<>();
int i = 0;
while(i < arr.length) {
if(list.isEmpty()) {
list.push(arr[i]);
i++;
} else {
if (list.peek() == arr[i]) {
list.pop();
i++;
} else {
list.push(arr[i]);
i++;
}
}
}
int[] answer = {};
if(list.isEmpty()) {
answer = new int[]{-1};
} else {
answer = new int[list.size()];
for (int j = list.size()-1; j >=0; j--) {
answer[j] = list.pop();
}
}
return answer;
}
}
무작위로 K개의 수 뽑기
https://school.programmers.co.kr/learn/courses/30/lessons/181858
import java.util.*;
class Solution {
public int[] solution(int[] arr, int k) {
List<Integer> list = new ArrayList<>();
int[] answer = new int[k];
list.add(arr[0]);
for(int i=1; i<arr.length; i++) {
if(!list.contains(arr[i])) {
list.add(arr[i]);
if(list.size() == k) break;
}
}
if(list.size() != k) {
while(list.size() < k) {
list.add(-1);
}
}
for(int i=0; i<list.size(); i++) {
answer[i] = list.get(i);
}
return answer;
}
}
문자열 뒤집기
https://school.programmers.co.kr/learn/courses/30/lessons/181905
class Solution {
public String solution(String my_string, int s, int e) {
String answer = "";
StringBuffer sb = new StringBuffer(my_string.substring(s, e+1));
String reverse = sb.reverse().toString();
answer = my_string.substring(0, s) + reverse + my_string.substring(e+1);
return answer;
}
}
꼬리 문자열
https://school.programmers.co.kr/learn/courses/30/lessons/181841
class Solution {
public String solution(String[] str_list, String ex) {
String answer = "";
for(String s : str_list) {
if(!s.contains(ex)) {
answer += s;
}
}
return answer;
}
}
수열과 구간 쿼리 1
https://school.programmers.co.kr/learn/courses/30/lessons/181883
class Solution {
public int[] solution(int[] arr, int[][] queries) {
for(int i=0; i<queries.length; i++) {
int s = queries[i][0];
int e = queries[i][1];
for(int j=s; j<=e; j++) {
arr[j] += 1;
}
}
return arr;
}
}
특별한 이차원 배열 1
https://school.programmers.co.kr/learn/courses/30/lessons/181833
class Solution {
public int[][] solution(int n) {
int[][] answer = new int[n][n];
for(int i=0; i<n; i++) {
for(int j=0; j<n; j++) {
if(i==j) {
answer[i][j] = 1;
} else {
answer[i][j] = 0;
}
}
}
return answer;
}
}
다른사람 풀이
int[][] answer = new int[n][n];
for(int i = 0 ; i < n ; i++) {
answer[i][i] = 1;
}
return answer;
이렇게 간단히 할 수 있었다 아무값도 안넣으면 0 채워지니까,,! 이런😦
문자열 바꿔서 찾기
https://school.programmers.co.kr/learn/courses/30/lessons/181864
class Solution {
public int solution(String myString, String pat) {
int answer = 0;
String result = "";
for (int i=0; i<myString.length(); i++) {
if (myString.charAt(i) == 'A') result += "B";
else result += "A";
}
if(result.contains(pat)) answer = 1;
return answer;
}
}
처음에는 charAt() 메서드를 이용해서 값을 확인하고 예를 들어 myString.charAt(i) =='A' 이면 myString.charAt(i) = 'B' 이런식으로 바로 값을 바꿔주려했는데 오류가 났다
charAt() 메서드는 문자를 반환하긴하지만 직접 새 값을 할당할 수는 없기 때문이다..!! 그래서 새로운 문자열 생성해준 후 거기에 더해가는식으로 바꿔주었다
정사각형으로 만들기
https://school.programmers.co.kr/learn/courses/30/lessons/181830
class Solution {
public int[][] solution(int[][] arr) {
int[][] answer;
if(arr.length == arr[0].length) {
answer = arr;
} else {
if(arr.length > arr[0].length) {
answer = new int[arr.length][arr.length];
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[0].length; j++) {
answer[i][j] = arr[i][j];
}
}
} else {
answer = new int[arr[0].length][arr[0].length];
for(int i=0; i<arr.length; i++) {
for(int j=0; j<arr[0].length; j++) {
answer[i][j] = arr[i][j];
}
}
}
}
return answer;
}
}
다른사람 풀이
int N = Math.max(arr.length, arr[0].length);
int[][] answer = new int[N][N];
for (int i = 0;i < N;i++) {
for (int j = 0;j < N;j++) {
나눠서 쓰지않고 그냥 둘 중 최대값을 배열길이로 놓고 하면 더 간단한 코드도 가능한거였다
'코딩테스트-알고리즘 > 도전' 카테고리의 다른 글
2024.01.09 - 9문제 (0) | 2024.01.09 |
---|---|
2024.01.08 - 18문제 (0) | 2024.01.08 |
2024.01.06 - 4문제 (1) | 2024.01.06 |
2024.01.05 - 5문제 (1) | 2024.01.05 |
2023.12.31 - 5문제 (0) | 2023.12.31 |