프로그래머스 Day06 조건문, 반복문

마지막 두 원소

💫문제 설명💫

정수 리스트 num_list가 주어질 때, 
마지막 원소가 그전 원소보다 크면 마지막 원소에서 그전 원소를 뺀 값을 
마지막 원소가 그전 원소보다 크지 않다면 마지막 원소를 두 배한 값을 추가하여 return하도록 solution 함수를 완성해주세요.

💫제한사항💫

2 ≤ num_list의 길이 ≤ 10
1 ≤ num_list의 원소 ≤ 9

💫입출력 ex💫

num_list result
[2, 1, 6] [2, 1, 6, 5]
[5, 2, 1, 7, 5] [5, 2, 1, 7, 5, 10]

문제풀이

class Solution {
    public int[] solution(int[] num_list) {
        int[] answer = new int[num_list.length+1];
        int i = 0;
        
        for(; i < num_list.length; i++) {
            answer[i] = num_list[i];
        }
        
        if(answer[i-1] > answer[i-2]) {
            answer[i] = answer[i-1] - answer[i-2];
        } else {
            answer[i] = answer[i-1] * 2;
        }
                
        return answer;
    }
}

수 조작하기 1

💫문제 설명💫

정수 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 함수를 완성해 주세요.

💫제한사항💫

-100,000 ≤ n ≤ 100,000
1 ≤ control의 길이 ≤ 100,000
  - control은 알파벳 소문자 "w", "a", "s", "d"로 이루어진 문자열입니다.

💫입출력 ex💫

n control result
0 “wsdawsdassw” -1

문제풀이

class Solution {
    public int solution(int answer, String control) {
        for (char c : control.toCharArray()) {
            if (c == 'w') {
                answer += 1;
            } else if (c == 's') {
                answer -= 1;
            } else if (c == 'd') {
                answer += 10;
            } else if (c == 'a') {
                answer -= 10;
            }
        }
        
        return answer ;
    }
}

수 조작하기 2

💫문제 설명💫

정수 배열 numLog가 주어집니다. 처음에 numLog[0]에서 부터 시작해 "w", "a", "s", "d"로 이루어진 문자열을 입력으로 받아 순서대로 다음과 같은 조작을 했다고 합시다.

"w" : 수에 1을 더한다.
"s" : 수에 1을 뺀다.
"d" : 수에 10을 더한다.
"a" : 수에 10을 뺀다.

그리고 매번 조작을 할 때마다 결괏값을 기록한 정수 배열이 numLog입니다. 
즉, numLog[i]는 numLog[0]로부터 총 i번의 조작을 가한 결과가 저장되어 있습니다.

주어진 정수 배열 numLog에 대해 조작을 위해 입력받은 문자열을 return 하는 solution 함수를 완성해 주세요.

💫제한사항💫

2 ≤ log의 길이 ≤ 100,000
  - -100,000 ≤ log[0] ≤ 100,000
  - 1 ≤ i ≤ log의 길이인 모든 i에 대해 |log[i] - log[i - 1]|의 값은 1 또는 10입니다.

💫입출력 ex💫

log result
[0, 1, 0, 10, 0, 1, 0, 10, 0, -1, -2, -1] “wsdawsdassw”

문제풀이

class Solution {
    public String solution(int[] numLog) {
        StringBuilder sb = new StringBuilder();
        
        for(int i=1; i<numLog.length; i++){
            switch(numLog[i]-numLog[i-1]){
                case 1 : sb.append("w"); break;
                case -1 : sb.append("s"); break;
                case 10 : sb.append("d"); break;
                case -10 : sb.append("a"); break;
            }
        }

        return sb.toString();
    }
}

수열과 구간 쿼리 2

💫문제 설명💫

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [s, e, k] 꼴입니다.

각 query마다 순서대로 s ≤ i ≤ e인 모든 i에 대해 k보다 크면서 가장 작은 arr[i]를 찾습니다.

각 쿼리의 순서에 맞게 답을 저장한 배열을 반환하는 solution 함수를 완성해 주세요.
단, 특정 쿼리의 답이 존재하지 않으면 -1을 저장합니다.

💫제한사항💫

1 ≤ arr의 길이 ≤ 1,000
  - 0 ≤ arr의 원소 ≤ 1,000,000
1 ≤ queries의 길이 ≤ 1,000
  - 0 ≤ s ≤ e < arr의 길이
  - 0 ≤ k ≤ 1,000,000

💫입출력 ex💫

arr queries result
[0, 1, 2, 4, 3] [[0, 4, 2],[0, 3, 2],[0, 2, 2]] [3, 4, -1]

문제풀이

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        int[] answer = new int[queries.length];
        
        // 매 쿼리마다 처리
        for (int i = 0; i < queries.length; i++) {
            int s = queries[i][0];
            int e = queries[i][1];
            int k = queries[i][2];
            
            // 쿼리 범위에서 k보다 큰 가장 작은 수 찾기
            int min = Integer.MAX_VALUE;
            boolean found = false;
            for (int j = s; j <= e; j++) {
                if (arr[j] > k && arr[j] < min) {
                    min = arr[j];
                    found = true;
                }
            }
            answer[i] = found ? min : -1;
        }
        
        return answer;
    }
}

수열과 구간 쿼리 3

💫문제 설명💫

정수 배열 arr와 2차원 정수 배열 queries이 주어집니다. queries의 원소는 각각 하나의 query를 나타내며, [i, j] 꼴입니다.

각 query마다 순서대로 arr[i]의 값과 arr[j]의 값을 서로 바꿉니다.

위 규칙에 따라 queries를 처리한 이후의 arr를 return 하는 solution 함수를 완성해 주세요.

💫제한사항💫

1 ≤ arr의 길이 ≤ 1,000
  - 0 ≤ arr의 원소 ≤ 1,000,000
1 ≤ queries의 길이 ≤ 1,000
  - 0 ≤ i < j < arr의 길이

💫입출력 ex💫

arr queries result
[0, 1, 2, 3, 4] [[0, 3],[1, 2],[1, 4]] [3, 4, 1, 0, 2]

문제풀이

class Solution {
    public int[] solution(int[] arr, int[][] queries) {
        for(int[] query : queries) {
            int i = query[0], j = query[1], temp = arr[i];
            arr[i] = arr[j];
            arr[j] = temp;
        }
        return arr;
    }
}

Categories:

Updated:

Leave a comment