정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[num_list.length + 1];
int last = 0;
if(num_list[num_list.length-1] > num_list[num_list.length-2] ){
last = num_list[num_list.length-1] - num_list[num_list.length-2];
} else {
last = num_list[num_list.length-1] * 2;
}
for (int j=0; j < num_list.length; j++){
answer[j] = num_list[j];
}
answer[num_list.length] = last;
return answer;
}
}
정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
"w" : n이 1 커집니다.
"s" : n이 1 작아집니다.
"d" : n이 10 커집니다.
"a" : n이 10 작아집니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
int answer = 0; for (int i=0; i<control.length(); i++) { if("w".equals(String.valueOf(control.charAt(i)))) { n += 1; } else if ("s".equals(String.valueOf(control.charAt(i)))) { n -= 1; } else if ("d".equals(String.valueOf(control.charAt(i)))) { n += 10; } else if ("a".equals(String.valueOf(control.charAt(i)))) { n -= 10; } } answer = n; return answer;
"s".equals(control.charAt(i))
이렇게 썼을땐 조건문에 들어가지 못했는데
control.charAt(i)는 char 타입이므로, "s".equals(control.charAt(i))는 컴파일 오류가 발생합니다.
equals() 메서드는 문자열과 비교하려는 값을 문자열로 전달해야 합니다.
그래서 String.valueOf()
를 사용해 String으로 바꿔줬다
정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.
"w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.
log | result |
---|---|
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1] | "wsdawsdassw" |
String solution(int[] numLog) { StringBuilder answer = new StringBuilder(); // numLog[i]와 numLog[i+1] 을 비교해서 어떤 문자열을 입력받았는지 확인하기 for (int i=0; i<numLog.length-1; i++) { int gap= 0; gap = numLog[i + 1] - numLog[i]; System.out.println("numLog[i] : " + numLog[i]); System.out.println("numLog[i] : " + numLog[i] + " i+1 - i : " + (numLog[i + 1] - numLog[i])); if(gap == 1) { // 1을 더함 answer.append("w"); } if(gap == -1) { // 1을 뺌 s answer.append("s"); } if(gap == 10) { // 10을 더함 d answer.append("d"); } if(gap == -10) { answer.append("a"); // 10을 뺌 a } } return answer.toString(); }
머리가 안굴러가면 로그 찍어보는게 중요!
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
arr | queries | result |
---|---|---|
[0, 1, 2, 3, 4] | [[0, 3],[1, 2],[1, 4]] | [3, 4, 1, 0, 2] |
int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[arr.length];
for (int i=0; i<queries.length; i++) {
int arri = queries[i][0];
int arrj = queries[i][1];
// queries 의 순서대로 arr[i],arr[j]의 값을 바꿈
for(int j=0; j<arr.length; j++){
answer[i] =
arr[arri] = arrj;
arr[arrj] = arri;
}
}
return arr;
}
이렇게 쓰면 queries 배열의 원소를 처리할 때, 반복문을 사용하지 않고 항상 동일한 arri와 arrj 값을 사용하게 된다!
public int[] solution(int[] arr, int[][] queries) { int[] answer = arr.clone(); // arr 배열의 복사본 생성 for (int i = 0; i < queries.length; i++) { int arri = queries[i][0]; int arrj = queries[i][1]; // arr[arri]와 arr[arrj]의 값을 서로 바꾸지 않고, // answer[arri]의 값과 answer[arrj]의 값을 바꿈 int temp = answer[arri]; answer[arri] = answer[arrj]; answer[arrj] = temp; } return answer; }
int temp = arr[arri];
arr[arri] = arr[arrj];
arr[arrj] = temp;
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
arr | queries | result |
---|---|---|
[0, 1, 2, 3, 4] | [[0, 4, 2],[0, 3, 2],[0, 2, 2]] | [3, 4, -1] |
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
class Solution {
public int[] solution(int[] arr, int[][] queries) {
List<Integer> answer = new ArrayList<>();
for (int num=0; num<queries.length; num++){
System.out.println("queries ["+num+"][0] : " + queries[num][0]);
System.out.println("queries ["+num+"][1] : " + queries[num][1]);
System.out.println("queries ["+num+"][2] : " + queries[num][2]);
System.out.println("--------------------");
int s = queries[num][0];
int e = queries[num][1];
int k = queries[num][2];
System.out.println("s : " + s);
System.out.println("e : " + e);
System.out.println("k : " + k);
List<Integer> list = new ArrayList<>();
for(int i=s; i<=e; i++){
if(arr[i]>k){
list.add(arr[i]);
}
}
if(!list.isEmpty()){
Collections.sort(list); // 오름차순 정렬
answer.add(list.get(0));
} else {
answer.add(-1);
}
}
int[] result = new int[answer.size()];
for (int i=0; i<result.length; i++){
result[i] = answer.get(i);
}
return result;
}
}
갈수록 어려워지네?;ㅎ