정수 리스트 num_list가 주어질 때, 마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.
import java.util.ArrayList;
class Solution {
public int[] solution(int[] num_list) {
ArrayList<Integer> answerList = new ArrayList<>();
for (int i = 0; i < num_list.length; i++) {
answerList.add(num_list[i]);
if(i == num_list.length-1){
if(num_list[i]>num_list[i-1]){
answerList.add(num_list[i]-num_list[i-1]);
}else{
answerList.add(num_list[i]*2);
}
}
}
int[] answer = new int[answerList.size()];
for (int i = 0; i < answerList.size(); i++) {
answer[i] = answerList.get(i);
}
return answer;
}
}
먼저 ArrayList를 import해서 동적배열을 생성하였다. 기존의 코드는 int[] answer = {};
가 주어졌었는데 이는 동적으로 길이를 조절할 수 없어서 ArrayList를 사용하였다.
이후 for문은 num_list의 길이만큼 돌면서 for문 안에서 마지막 원소인가를 if문으로 확인하였다.
확인을마치고 이제 마지막 원소와 전 원소의 크기를 비교하였고, 문제에 주어진 연산을 수행한 후 answerList라는 ArrayList에 추가하였다. 그 후 int[]
형으로 return 해주기위해서 answerList를 돌면서 answer에 하나씩 get해주었다.
처음에 풀었던 코드는 아래와 같다.
class Solution {
public int[] solution(int[] num_list) {
int[] answer = new int[num_list.length + 1];
for(int i=0; i<answer.length; i++){
if(i == num_list.length){
if(num_list[i-1]>num_list[i-2]){
answer[i] = num_list[i-1]-num_list[i-2];
}else{
answer[i] = num_list[i-1] * 2;
}
}else{
answer[i] = num_list[i];
}
}
return answer;
}
}
동적으로 만드는 방법이 없을까라는 고민끝에 저런 코드가 나오게 되었다.
정수 n과 문자열 control이 주어집니다. control은 "w", "a", "s", "d"의 4개의 문자로 이루어져 있으며, control의 앞에서부터 순서대로 문자에 따라 n의 값을 바꿉니다.
위 규칙에 따라 n을 바꿨을 때 가장 마지막에 나오는 n의 값을 return 하는 solution 함수를 완성해 주세요.
class Solution {
public int solution(int n, String control) {
int answer = n;
for(int i=0; i<control.length(); i++){
char ctrl = control.charAt(i);
if(ctrl == 'w'){
answer++;
}else if(ctrl == 's'){
answer--;
}else if(ctrl == 'd'){
answer+=10;
}else{
answer-=10;
}
}
return answer;
}
}
이번 풀이는 String으로 입력받은 control을 split으로 배열로 만들지 않고 풀이를 해봤다.
for문에서 control의 길이만큼 반복하면서 현재 index값에 따른 문자를 ctrl에 저장을 하였고, if~else문을 사용해서 각 경우의 연산을 수행한 값을 answer에 계속 누적하였다.
지금생각해보면 switch case문을 사용했으면 더 명확하고 깔끔하게 코드를 작성할 수 있었을꺼같다.
정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.
그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 즉, numLog[i]
는 numLog[0]
로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.
주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.
class Solution {
public String solution(int[] numLog) {
String answer = "";
for(int i=0; i<numLog.length - 1; i++){
int result = numLog[i+1] - numLog[i];
switch(result) {
case 1: answer+="w"; break;
case -1: answer+="s"; break;
case 10: answer+="d"; break;
case -10: answer+="a"; break;
default: break;
}
}
return answer;
}
}
numLog를 for문을 통해 길이만큼 돌면서 현재 index의 값과 1칸 앞의 index에 해당하는 값의 차이가 결국 어떤 연산을 시행했는지에 대한 정보를 담고있다. 따라서, 그 결과를 result라는 변수에 저장하고 switch~case문을 통해서 answer에 더한후 이를 return 하였다.
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.
각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.
위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.
class Solution {
public int[] solution(int[] arr, int[][] queries) {
int[] answer = arr;
for(int i=0; i<queries.length; i++){
int[] query = queries[i];
int temp = answer[query[0]];
answer[query[0]] = answer[query[1]];
answer[query[1]] = temp;
}
return answer;
}
}
변환할 배열을 answer에 복사해두고, queries의 길이만큼 for문을 돌면서, query 변수에 어떤 index의 값을 바꿀지 저장하였다.
그 후, 첫번째 index값을 temp라는 변수에 임시저장해두고 두번째 변수를 첫번째 변수의 index에 할당, temp에 임시로 저장해둔 값을 두번째 변수에 할당하여 서로 바꾼후 answer를 return 하였다.
정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.
각 query마다 순서대로 s ≤ i ≤ e
인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.
각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.
import java.util.ArrayList;
import java.util.Arrays;
public class Solution {
public static int[] solution(int[] arr, int[][] queries) {
int[] answer = new int[queries.length];
Arrays.fill(answer, -1); // 초기값으로 -1을 채워놓습니다.
for (int i = 0; i < queries.length; i++) {
int s = queries[i][0];
int e = queries[i][1];
int k = queries[i][2];
int minValue = Integer.MAX_VALUE;
for (int j = s; j <= e; j++) {
if (arr[j] > k && arr[j] < minValue) {
minValue = arr[j];
}
}
if (minValue != Integer.MAX_VALUE) {
answer[i] = minValue;
}
}
return answer;
}
}
queries의 길이만큼 for문을 돌면서, 각 값을 변수 s, e, k에 저장하고 최솟값을 저장할 변수 minValue에 일단 최대값을 저장하였다. 그 후 for문을 s부터 e까지 돌면서 k보다 크면서 가장작은 값을 탐색하였다. 이는 minValue에 저장하였고 그후 if문을 돌면서 만약 최대값이 minValue가 아니라면 answer에 값을 저장하였고 그가 아니라면 -1을 유지하도록 작성하였다.
오.알.완!!!!